Foros del Web » Programando para Internet » PHP »

Imprimir los 35 últimos registros

Estas en el tema de Imprimir los 35 últimos registros en el foro de PHP en Foros del Web. Hola amigos. Antes con ASP en la sentencia sql sólo tenía que ponerle SELECT TOP 35 FROM tabla ORDER BY x DESC para mostrar los ...
  #1 (permalink)  
Antiguo 21/09/2009, 06:37
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Imprimir los 35 últimos registros

Hola amigos.
Antes con ASP en la sentencia sql sólo tenía que ponerle SELECT TOP 35 FROM tabla ORDER BY x DESC
para mostrar los últimos 35 registros.
Ahora con PHP no me aclaro, y con LIMIT no me vale, ya que empieza desde 1. La sentencia que estoy utilizando es :

Código PHP:
SELECT FROM x WHERE fecha
LIKE 
'".$fecha."' AND hora>'".$_GET['conexion']."'
AND sala=".$sala." ORDER BY fechahora ASC 
Si le pongo:
Código PHP:
SELECT FROM x WHERE fecha
LIKE 
'".$fecha."' AND hora>'".$_GET['conexion']."'
AND sala=".$sala." ORDER BY fechahora ASC LIMIT 0,35 
Sólo me muestra los PRIMEROS 35 registros.

Cómo puedo hacer?
Un saludo.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #2 (permalink)  
Antiguo 21/09/2009, 06:47
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Imprimir los 35 últimos registros

Lo que sucede es que estas haciendo un ASC indicandole al query que te muestre desde el principio al final, tu debes indicar un DESC para vaya desde el último hasta el principio. Lo otro que te sugiero que en vez de hacerlo por la hora el DESC lo hagas por ID. Ejemplo vamos a suponer que tienes ID, Fecha, Hora el ID es un autoincrement por lo tanto solo registra números, cuando hagas el ORDER BY lo haces por el ID y que sea DESC
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #3 (permalink)  
Antiguo 21/09/2009, 07:09
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Imprimir los 35 últimos registros

Cita:
Iniciado por abimaelrc Ver Mensaje
Lo que sucede es que estas haciendo un ASC indicandole al query que te muestre desde el principio al final, tu debes indicar un DESC para vaya desde el último hasta el principio. Lo otro que te sugiero que en vez de hacerlo por la hora el DESC lo hagas por ID. Ejemplo vamos a suponer que tienes ID, Fecha, Hora el ID es un autoincrement por lo tanto solo registra números, cuando hagas el ORDER BY lo haces por el ID y que sea DESC
Gracias amigo. Te explico un poco mejor. Lo de la hora tiene que ser así, ya que se le pasa un valor por parámetro que registra la hora de conexión del usuario, por eso no puede ser por id. O dices sólo de ordenarlo? La hora es un campo TIME y la fecha DATE , sql los reconoce bien.

Lo de DESC no me sirve porque tengo que mostrar los datos en orden ASCENDENTE, por eso tal vez con php pueda hacer una función que obvie el resto de los campos a mostrar, es decir, todos excepto los 35 últimos que vienen en orden ascendente de la sentencia sql.

Un saludo y a ver cómo podemos hacer esto ;)

Gracias.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #4 (permalink)  
Antiguo 21/09/2009, 07:13
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Imprimir los 35 últimos registros

Pero, ¿tu quieres los primeros o los últimos? Si lo que quieres son los últimos te sugiero usar el método que te indique, ya que solamente el ID te va a ser útil para colocarlos en orden DESC y así seleccionar los últimos, si lo que quieres es solamente los primeros 35 con lo que estas haciendo es suficiente.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #5 (permalink)  
Antiguo 21/09/2009, 07:18
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Imprimir los 35 últimos registros

Cita:
Iniciado por abimaelrc Ver Mensaje
Pero, ¿tu quieres los primeros o los últimos? Si lo que quieres son los últimos te sugiero usar el método que te indique, ya que solamente el ID te va a ser útil para colocarlos en orden DESC y así seleccionar los últimos, si lo que quieres es solamente los primeros 35 con lo que estas haciendo es suficiente.
Te explico un poco mejor xD
El rollo es que es un minichat que estoy haciendo basado en bases de datos mysql y php. Los registros los muestro en orden ASCENDENTE para que veas la conversación de arriba a abajo, y no al revés. Si le pongo orden descendente qué pasará? Que tendrás que leer la conversación como los chinos, de abajo a arriba. Por eso necesito mostrarlo en orden ascendente, pero los 35 últimos registros nada más. Y me estoy comiendo la cabeza y no sé cómo hacerlo.
A ver si se te ocurre alguna idea por favor.

Mil gracias y un saludo.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #6 (permalink)  
Antiguo 21/09/2009, 07:27
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Imprimir los 35 últimos registros

Ok, yo estoy tambien creando un minichat. La forma como lo estoy haciendo es de esta forma.
Código mysql:
Ver original
  1. SELECT Texto FROM tbl_chat_publico ORDER BY ID DESC LIMIT 0,50
Luego los coloco dentro de un array en PHP y hago un array_reverse. Esto hace que lo vuelva a colocar en el orden que yo quiero.
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #7 (permalink)  
Antiguo 21/09/2009, 07:31
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Imprimir los 35 últimos registros

ahhhhhhhh voy a estudiarlo y te cuento eso del array_reverse es muy interesante.
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #8 (permalink)  
Antiguo 21/09/2009, 09:31
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Imprimir los 35 últimos registros

Uff estoy atascado, no me sale. A ver si me puedes echar una mano. He probado así:

Código PHP:
        $sql2="SELECT * FROM x WHERE x ORDER BY fecha, hora DESC LIMIT 0,40;";
        
$result2=mysql_query($sql2,$conexion2);

    
$row=mysql_fetch_array($result2);
        
$row=array_reverse($row);
    while (
$row
También he probado así:

Código PHP:
        $sql2="SELECT * FROM x WHERE x ORDER BY fecha, hora DESC LIMIT 0,40;";
        
$result2=mysql_query($sql2,$conexion2);

    while(
$row=array_reverse(mysql_fetch_array($result2))); 
y he probado

Código PHP:
        $sql2="SELECT * FROM x WHERE x ORDER BY fecha, hora DESC LIMIT 0,40;";
        
$result2=mysql_query($sql2,$conexion2);
$row=mysql_fetch_array($result2);
    while(
array_reverse($row)) 
Y no funciona. Qué estoy haciendo mal?
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #9 (permalink)  
Antiguo 21/09/2009, 09:33
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Imprimir los 35 últimos registros

Primero que en la consulta no debe ir el ;

Segundo debes hacer lo del array de esta forma
Código PHP:
Ver original
  1. $sql_s = "SELECT Texto FROM tbl_chat_publico ORDER BY ID DESC LIMIT 0,50";
  2. $r_s = mysql_query($sql_s) or die(mysql_error());
  3.  
  4. //Asignar a un array los 50 mensajes
  5. $array = array();
  6. while($row = mysql_fetch_assoc($r_s)){
  7.     $array[] = array("Texto" => $row["Texto"]);
  8. }
  9.  
  10. //Modificar los mensaje a que sea ASC
  11. $array = array_reverse($array);
  12.  
  13. echo "<pre>";
  14. print_r($array);
  15. echo "</pre>";

Por último te sigo indicando que lo mejor es hacer un DESC por el ID, no por hora, ni por fecha.

Me dejas saber
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
  #10 (permalink)  
Antiguo 21/09/2009, 10:17
Avatar de CHuLoSoY  
Fecha de Ingreso: febrero-2002
Ubicación: Ribeira (Galicia)
Mensajes: 1.900
Antigüedad: 22 años, 2 meses
Puntos: 29
Respuesta: Imprimir los 35 últimos registros

Mira, lo he hecho así:

Código PHP:
        $conexion2=mysql_connect($dbserver,$dbuser,$dbpass);
        
mysql_select_db($db,$conexion2);
        
$sql2="SELECT * FROM gap_chat_conversaciones WHERE fecha LIKE '".$fecha."' AND hora>'".$_GET['conexion']."' AND sala=".$sala." ORDER BY id DESC LIMIT 0,40;";
        
$result2=mysql_query($sql2,$conexion2);

$array = array();
    while (
$row mysql_fetch_assoc($result2))
        {
            
$array[] = array("sala" => $row["sala"], "mensaje" => $row['mensaje'], "fecha" => $row['fecha'], "hora" => $row['hora'], "user" => $row['user']);
        }

$array array_reverse($array);

echo 
"<pre>";

print_r($array);

echo 
"</pre>"
Este es el resultado:

Warning: array_reverse() [function.array-reverse</a>]: The argument should be an array in ****.php on line 16
__________________
ESQUIO Dominios y Hosting
Las mejores características con los mejores precios.
  #11 (permalink)  
Antiguo 21/09/2009, 10:30
Avatar de abimaelrc
Colaborador
 
Fecha de Ingreso: mayo-2009
Ubicación: En el planeta de Puerto Rico
Mensajes: 14.734
Antigüedad: 14 años, 11 meses
Puntos: 1517
Respuesta: Imprimir los 35 últimos registros

haz esto para saber que te trae

Código PHP:
Ver original
  1. $array = array();
  2. while ($row = mysql_fetch_assoc($result2)){
  3.     $array[] = array("sala" => $row["sala"], "mensaje" => $row['mensaje'], "fecha" => $row['fecha'], "hora" => $row['hora'], "user" => $row['user']);
  4. }
  5. var_dump($array);

Tambien te sugiero que le añadas esto a ver si te da un error
Código PHP:
Ver original
  1. $result2=mysql_query($sql2,$conexion2) or die(mysql_error());
Aunque no creo porque no te da un error en el mysql_fetch_assoc()
__________________
Verifica antes de preguntar.
Los verdaderos amigos se hieren con la verdad, para no perderlos con la mentira. - Eugenio Maria de Hostos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 07:31.