Autor
|
Tema: Consulta Ultimos mensajes (Leído 4,478 veces)
|
Ari Slash
|
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 $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
|
a bote pronto diria... $mensajes=mysql_query("SELECT tema,numero,usuario,fecha,hora FROM mensajes ORDER BY fecha");
el limit 10 es para mostrar solo 10, no para ordenarlos. saludos nax
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
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: mysql> SELECT * FROM ejemplo; +---------+ | palabra | +---------+ | Coco | | Mango | | Pera | | Uva | | Fresa | | Manzana | | Melon | | Sandia | +---------+ 8 ROWS IN SET (0.02 sec)
Y yo quiero por ejemplo los 2 ultimos (Melon & Sandia) entonces: mysql> SELECT * FROM ejemplo LIMIT 6,8; +---------+ | palabra | +---------+ | Melon | | Sandia | +---------+ 2 ROWS IN SET (0.00 sec)
Ahora quiero no esos 2 ultimos sino los antepenultimos... entonces haria: mysql> SELECT * FROM ejemplo LIMIT 4,7; +---------+ | palabra | +---------+ | Fresa | | Manzana | | Melon | | Sandia | +---------+ 4 ROWS IN SET (0.00 sec) mysql> SELECT * FROM ejemplo LIMIT 1,3; +---------+ | palabra | +---------+ | Mango | | Pera | | Uva | +---------+ 3 ROWS IN SET (0.00 sec)
Vas entendiendo como va muchacho 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
|
gracias n4x y tifa gracias por tu dedicacion tifa a lo que tenga el codigo lo postea aver como va, ya se me escurrieron ideas saludos
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
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 si es lo segundo propuesto por mi o N4X iras bien 1 sola linea de consulta SQL. Un saludito
|
|
|
En línea
|
|
|
|
Ari Slash
|
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: 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: <?php $min=$max-10; $mensajes=mysql_query('SELECT * FROM mensajes ORDER BY correlativo LIMIT '.$min.','.$max.';'); echo "<a href='/temas.php?id=".$fila["tema"]; echo "'>Mensaje en ".$tema["nombre"]." por ".$fila["usuario"]." [".$fila["hora"]." / ".$fila["fecha"]."]"; echo "</a><br>"; } ?>
fue una mezcla de las dos soluciones xD ahora me toca probarlo xD, ya que debo modificar mi base de datos que opinas tifa? saludos
|
|
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
No se PHP Pero tratando de interpretar tu codigo (si funciona) esto: $min=$max-10; $mensajes=mysql_query('SELECT * FROM mensajes ORDER BY correlativo LIMIT '.$min.','.$max.';'); while($fila=mysql_fetch_array($mensajes)){
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
|
ya tifa ya lo probe...tuve que hacer unas modificaciones pero funciono 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 y ademas le agrege la propiedad auto_increment al atributo correlativo para que fuese automatico... <br> Ultimos mensajes: <br> <?php $mensajes=mysql_query('SELECT * FROM mensajes'); //consultando total mensajes $max=mysql_num_rows($mensajes); //pasando el numero de filas del array a entero if($max<=10){ $min=0; //si hay menos o igual de 10 el menor a mostrar sera el 1 } else { $min=$max-10; //si hay mas de 10, se restan 10 al max } $max=10; //el maximo se establece en 10 a partir del min $mensajes=mysql_query('SELECT tema,usuario,hora,fecha FROM mensajes ORDER BY correlativo LIMIT '.$min.','.$max.''); //se consulta por los 10 ultimos mensajes echo "<a href='/temas.php?id=".$fila["tema"]; echo "'>Mensaje en ".$tema["nombre"]." por ".$fila["usuario"]." [".$fila["hora"]." / ".$fila["fecha"]."]"; } ?>
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 aqui dejo unas capturas (colocale abrir vinculo en nueva ventana) http://imgas.zxq.net/elhackernet/Mensajes1.pnghttp://imgas.zxq.net/elhackernet/Mensajes2.pngNuevamente gracias ojala tuviese profesoras como tu saludos
|
|
« Última modificación: 13 Enero 2010, 17:22 pm por Ari-Slash »
|
En línea
|
|
|
|
^Tifa^
Desconectado
Mensajes: 2.804
|
Me alegro sobremanera que pudieses resolver Ari el proposito era intentar guiarte a una solucion, y me alegro que hayas dado con una. 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
|
|
|
En línea
|
|
|
|
|
|