elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Security Series.XSS. [Cross Site Scripting]


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Consulta Ultimos mensajes
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Consulta Ultimos mensajes  (Leído 4,478 veces)
Ari Slash


Desconectado Desconectado

Mensajes: 1.783



Ver Perfil WWW
Consulta Ultimos mensajes
« en: 12 Enero 2010, 19:09 pm »

Buenas...

la verdad es que no se como se hace pero lo que quiero es algo asi como
lo que hay en el index del foro donde salen los ultimos 10 mensajes de los users

mi consulta es asi
Código
  1. $mensajes=mysql_query("SELECT tema,numero,usuario,fecha,hora FROM mensajes limit 10;");

obviamente los cargo con un bucle, eso todo ok.....
pero me salen los mismos mensajes siempre xD
hay alguna forma de que me tome los 10 ultimos? segun la fecha y hora?


saludos y gracias


En línea

N4X

Desconectado Desconectado

Mensajes: 74



Ver Perfil WWW
Re: Consulta Ultimos mensajes
« Respuesta #1 en: 12 Enero 2010, 19:20 pm »

a bote pronto diria...

Código
  1. $mensajes=mysql_query("SELECT tema,numero,usuario,fecha,hora FROM mensajes ORDER BY fecha");
  2.  

el limit 10 es para mostrar solo 10, no para ordenarlos.

saludos
nax


En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Consulta Ultimos mensajes
« Respuesta #2 en: 12 Enero 2010, 19:21 pm »

Tomar los 10 ultimos siempre de todos los registros de la tabla??? se haria asi por ejemplo no seria problema, pero vas a tener que aprender a jugar con el contador  ;)  me explico, observa este ejemplo.

Tengo 8 registros en 1 campo de una tabla ejemplo:

Código
  1.  
  2. mysql> SELECT * FROM ejemplo;
  3. +---------+
  4. | palabra |
  5. +---------+
  6. | Coco    |
  7. | Mango   |
  8. | Pera    |
  9. | Uva     |
  10. | Fresa   |
  11. | Manzana |
  12. | Melon   |
  13. | Sandia  |
  14. +---------+
  15. 8 ROWS IN SET (0.02 sec)
  16.  
  17.  

Y yo quiero por ejemplo los 2 ultimos (Melon & Sandia) entonces:

Código
  1.  
  2. mysql> SELECT * FROM ejemplo LIMIT 6,8;
  3. +---------+
  4. | palabra |
  5. +---------+
  6. | Melon   |
  7. | Sandia  |
  8. +---------+
  9. 2 ROWS IN SET (0.00 sec)
  10.  
  11.  
  12.  

Ahora quiero no esos 2 ultimos sino los antepenultimos... entonces haria:

Código
  1.  
  2. mysql> SELECT * FROM ejemplo LIMIT 4,7;
  3. +---------+
  4. | palabra |
  5. +---------+
  6. | Fresa   |
  7. | Manzana |
  8. | Melon   |
  9. | Sandia  |
  10. +---------+
  11. 4 ROWS IN SET (0.00 sec)
  12.  
  13. mysql> SELECT * FROM ejemplo LIMIT 1,3;
  14. +---------+
  15. | palabra |
  16. +---------+
  17. | Mango   |
  18. | Pera    |
  19. | Uva     |
  20. +---------+
  21. 3 ROWS IN SET (0.00 sec)
  22.  
  23.  
  24.  

Vas entendiendo como va muchacho  :D  juega con tu contador o bucle  ;) para ir obteniendo los 10 ultimos y los 10 antepenultimos y asi sucesivamente.

Ahora si es solo tomar los 10 ultimos de todos los registros de la tabla 1 sola vez, pues:

SELECT * FROM TABLA ORDER BY fecha DESC LIMIT 10;
« Última modificación: 12 Enero 2010, 19:26 pm por ^TiFa^ » En línea

Ari Slash


Desconectado Desconectado

Mensajes: 1.783



Ver Perfil WWW
Re: Consulta Ultimos mensajes
« Respuesta #3 en: 12 Enero 2010, 19:27 pm »

gracias n4x y tifa  ;D

gracias por tu dedicacion tifa  :)

a lo que tenga el codigo lo postea aver como va, ya se me escurrieron ideas  :rolleyes:





saludos
En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Consulta Ultimos mensajes
« Respuesta #4 en: 12 Enero 2010, 19:35 pm »

De nada Ari. Si es la primera opcion que te propuse lo que estas solicitando entonces si.. tienes alguito que restructurar con tu codigo y MySQL  :xD si es lo segundo propuesto por mi o N4X iras bien 1 sola linea de consulta SQL.

Un saludito  :D
En línea

Ari Slash


Desconectado Desconectado

Mensajes: 1.783



Ver Perfil WWW
Re: Consulta Ultimos mensajes
« Respuesta #5 en: 13 Enero 2010, 04:46 am »

hola

bueno no estuve toda la tarde tratando de solucionarlo xD, me salio una emergencia

lo solucione de esta manera, le agrege un atributo a los mensajes llamado correlativo, entonces los ordene por correlativo y tome los 10 ultimos

esta es mi base datos:

Citar
mensajes(tema,numero,usuario,cuerpo,fecha,hora,eliminado,correlativo)
temas(id,nombre)
usuarios(nick,password,email,fecha_registro,privilegio)

y este es el codigo php:

Código
  1. <?php
  2. $conexión=mysql_connect($_SESSION["host"],$_SESSION["usuario"],$_SESSION["clave"])or die ('Ha fallado la conexion: '.mysql_error());
  3. mysql_select_db($_SESSION["basedatos"])or die ('Error: '.mysql_error());
  4. $mensajes=mysql_query("SELECT * FROM mensajes;");
  5. $max=mysql_num_rows($mensajes);
  6. $min=$max-10;
  7. $mensajes=mysql_query('SELECT * FROM mensajes ORDER BY correlativo LIMIT '.$min.','.$max.';');
  8. while($fila=mysql_fetch_array($mensajes)){
  9. $tema= mysql_fetch_array(mysql_query("select nombre from temas where id=".$fila["tema"]));
  10. echo "<a href='/temas.php?id=".$fila["tema"];
  11. echo "'>Mensaje en ".$tema["nombre"]." por ".$fila["usuario"]." [".$fila["hora"]." / ".$fila["fecha"]."]";
  12. echo "</a><br>";
  13. }
  14. mysql_close($conexión);
  15. ?>
  16.  


fue una mezcla de las dos soluciones xD

ahora me toca probarlo xD, ya que debo modificar mi base de datos  :xD

que opinas tifa?


saludos

En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Consulta Ultimos mensajes
« Respuesta #6 en: 13 Enero 2010, 05:05 am »

No se PHP  ;D

Pero tratando de interpretar tu codigo (si funciona) esto:

Código
  1. $min=$max-10;
  2. $mensajes=mysql_query('SELECT * FROM mensajes ORDER BY correlativo LIMIT '.$min.','.$max.';');
  3. while($fila=mysql_fetch_array($mensajes)){
  4.  
  5.  

Deberia hacer justamente lo que te especifique en el paso 1 de mi ejemplo, que seria seleccionar todos los registros de la tabla (Supongamos que en total tienes 200 registros) los cuales se le asigna el valor a la variable $max y la variable $min = $max-10 por lo cual los datos a mostrar irian reduciendose de 10 en 10  ;)

Aun desconozco si quieres captar la data desde el final de todos los registros o desde el inicio. Pero si utilizas el ORDER BY sin especificarle ascendiente o descendiente, por defecto el utiliza Ascendiente.  ;)

Me avisas cuando pruebes tu codigo.

PD: Se me olvidaba, ten pendiente que los registros dentro de los campos de las tablas son contados por LIMIT como en programacion accesamos a indices de un arreglo. Digase que el primer registro de una tabla se accede a el mediante 0, no comienza en 1 sino en 0

Saludos.
« Última modificación: 13 Enero 2010, 05:10 am por ^TiFa^ » En línea

Ari Slash


Desconectado Desconectado

Mensajes: 1.783



Ver Perfil WWW
Re: Consulta Ultimos mensajes
« Respuesta #7 en: 13 Enero 2010, 08:39 am »

ya tifa ya lo probe...tuve que hacer unas modificaciones pero funciono  ;D

aqui el codigo arreglado, lo tuve que reparar porque se me habia olvidado que si hay menos de 10 mensajes en el "foro", saldria error hasta que hubiesen 11  :xD
y ademas le agrege la propiedad auto_increment al atributo correlativo para que fuese automatico...

Código
  1. <br>
  2. Ultimos mensajes:
  3. <br>
  4. <?php
  5. $conexion=mysql_connect($_SESSION["host"],$_SESSION["usuario"],$_SESSION["clave"])or die ('Ha fallado la conexion: '.mysql_error());
  6. mysql_select_db($_SESSION["basedatos"])or die ('Error al seleccionar la Base de Datos: '.mysql_error()); //datos de conexión
  7. $mensajes=mysql_query('SELECT * FROM mensajes'); //consultando total mensajes
  8. $max=mysql_num_rows($mensajes); //pasando el numero de filas del array a entero
  9. if($max<=10){
  10. $min=0; //si hay menos o igual de 10 el menor a mostrar sera el 1
  11. } else {
  12. $min=$max-10; //si hay mas de 10, se restan 10 al max
  13. }
  14. $max=10; //el maximo se establece en 10 a partir del min
  15. $mensajes=mysql_query('SELECT tema,usuario,hora,fecha FROM mensajes ORDER BY correlativo LIMIT '.$min.','.$max.''); //se consulta por los 10 ultimos mensajes
  16. while($fila=mysql_fetch_array($mensajes)){ //ciclo que generara el html
  17. $tema= mysql_fetch_array(mysql_query('select nombre from temas where id='.$fila["tema"].''));
  18. echo "<a href='/temas.php?id=".$fila["tema"];
  19. echo "'>Mensaje en ".$tema["nombre"]." por ".$fila["usuario"]." [".$fila["hora"]." / ".$fila["fecha"]."]";
  20. echo "</a><br>";
  21. }
  22. mysql_close($conexion); //cerrando la conexión
  23. ?>
  24.  

la logica que entendi del limit fue la siguiente, segun las pruebas, el primer valor es de donde se partira (este sin contarlo) y el segundo cuantos registros mas contar ascendientemente. un poco enredado pero asi lo entendi  :xD

aqui dejo unas capturas  ;D (colocale abrir vinculo en nueva ventana)

http://imgas.zxq.net/elhackernet/Mensajes1.png
http://imgas.zxq.net/elhackernet/Mensajes2.png



Nuevamente gracias  :D

ojala tuviese profesoras como tu


saludos  :)

« Última modificación: 13 Enero 2010, 17:22 pm por Ari-Slash » En línea

^Tifa^


Desconectado Desconectado

Mensajes: 2.804


Ver Perfil
Re: Consulta Ultimos mensajes
« Respuesta #8 en: 13 Enero 2010, 18:32 pm »

Me alegro sobremanera que pudieses resolver Ari  ;)

el proposito era intentar guiarte a una solucion, y me alegro que hayas dado con una.

Citar
la logica que entendi del limit fue la siguiente, segun las pruebas, el primer valor es de donde se partira (este sin contarlo) y el segundo cuantos registros mas contar ascendientemente. un poco enredado pero asi lo entendi

Digamos que efectivamente seria asi, el primer valor es de donde se parte y el segundo cuantos registros mas contar ascendientemente como dices  ;) enredado ciertamente, pero esa es la idea  ;D
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Consulta] ¿Esta disponible el codigo fuente del menu de mensajes de elhacker...
Desarrollo Web
astinx 2 1,970 Último mensaje 24 Diciembre 2011, 01:21 am
por astinx
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines