Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

ordenar query

Estas en el tema de ordenar query en el foro de Mysql en Foros del Web. buenas, estoy haciendo un chat para una tarea de la facu tengo una tabla chat que contiene lo siguiente: id,user,mensaje lo que quiero hacer es ...
  #1 (permalink)  
Antiguo 05/10/2013, 10:36
 
Fecha de Ingreso: octubre-2013
Mensajes: 14
Antigüedad: 10 años, 6 meses
Puntos: 0
ordenar query

buenas, estoy haciendo un chat para una tarea de la facu
tengo una tabla chat que contiene lo siguiente:

id,user,mensaje

lo que quiero hacer es mostrar los ultimos 200 mensajes de forma asc
quedaria algo asi

mensaje 1
mensaje 2
........
mensaje 200

SELECT * FROM chat ORDER BY id ASC LIMIT 200 usando este query me los muestra

mensaje200
...
mensaje2
mensaje1

hay alguna forma de arreglarlo?
  #2 (permalink)  
Antiguo 05/10/2013, 10:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ordenar query

No te los debería mostrar como dices, a menos que hubiese un error a nivel de programación al generar la visualización. Al menos no debería ocurrir si el campo ID es INT.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/10/2013, 10:58
 
Fecha de Ingreso: octubre-2013
Mensajes: 14
Antigüedad: 10 años, 6 meses
Puntos: 0
Respuesta: ordenar query

esto es lo que pasa supongamos que tengo 10 mensajes en el chat, si pongo:
SELECT * FROM chat ORDER BY id ASC LIMIT 5

me muestra los mensajes 1,2,3,4,5 en ese orden

lo que quiero es que me muestre 5,6,7,8,9,10 en ese orden

la logica seria algo asi

select tabla char ordenala por id desc limitalo 5 (agarra valores 5,10) y que los muestre de forma ASC

Última edición por hyezs; 05/10/2013 a las 11:04
  #4 (permalink)  
Antiguo 05/10/2013, 11:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ordenar query

Vamos a ver: ¿Te quedó claro que nosotros conocemos exactamente lo que hace el ORDER BY, no?
Y que entendemos perfectamente las probabilidades de error y por qé pueden producirse, ¿no es así?
Bien, ahora vamos a lo que realmente dijiste en el primer post:
Cita:
SELECT * FROM chat ORDER BY id ASC LIMIT 200 usando este query me los muestra

mensaje200
...
mensaje2
mensaje1
Eso es imposible que suceda, si la columna ID es de tipo numérico. Y es a eso a lo que me refería.

Por lo demás, ordenar de una u otra forma, es algo que puedes sacar de cualquier manual básico: O lo haces en forma ascendente con ASC, o lo haces en forma descendente con DESC.
Si no está funcionando correctamente, entonces debes mostrarnos un caso real, con datos reales, y especificar los tipos de columna de la tabla, para poder ver por qué no se está cumpliendo alguna condición que debería cumplirse.
Ten en cuenta que sin ver los datos reales, a veces es imposible saber dónde metieron la pata.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 05/10/2013, 13:01
 
Fecha de Ingreso: mayo-2008
Mensajes: 315
Antigüedad: 16 años
Puntos: 7
Respuesta: ordenar query

Cita:
Tabla = {1,3,5,4,2,7,6,8,10,9}
El problema que tu tienes es que el ORDER BY te ordena mediante el campo que tu le indicas.
Una vez le aplicas a la tabla un ORDER BY id ASC ordena ascendentemente respecto la id.

Cita:
Tabla = {1,2,3,4,5,6,7,8,9,10}
Si ahora aplicas un limite, de toda esta tabla, estas indicando que te quieres quedar con un trozo. Si haces LIMIT 5 te quedas con lo siguiente:

Cita:
Tabla = {1,2,3,4,5}
Pero ati no te interesa eso, te interesa la parte restante.

¿Como aplicas esto a tu problema?
Pues puedes hacer lo siguiente
Cita:
SELECT * FROM (SELECT * FROM tabla ORDER BY id DESC) as t1 ORDER BY id ASC
  #6 (permalink)  
Antiguo 05/10/2013, 13:43
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: ordenar query

El planteo es básicamente correcto, pero no explica el problema que @hyezs menciona, porque el LIMIT usado por él es de 200, y precisamente tendría (se infiere por el ejemplo) 200 registros...
A mi lo que no me cierra es que afirma que, usando un ORDER BY id ASC, el ID termine ordenado en forma descendente.
Eso es lo que quiero que me aclare, y sólo se entendería con información más precisa y real.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #7 (permalink)  
Antiguo 06/10/2013, 04:27
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: ordenar query

Yo veo lo siguiente:
el primer post del hilo plantea una problemática distinta al tercero. La perplejidad de gnzsoloyo se explica claramente por la redacción del primer post. Yo tampoco entiendo por qué ocurre lo que dice hyezs que ocurre, la verdad, al menos tal y como lo cuenta.
Sin embargo, en el post 3 dice lo siguiente (el post lo ha editado):
Cita:
esto es lo que pasa supongamos que tengo 10 mensajes en el chat, si pongo:
SELECT * FROM chat ORDER BY id ASC LIMIT 5

me muestra los mensajes 1,2,3,4,5 en ese orden

lo que quiero es que me muestre 5,6,7,8,9,10 en ese orden

la logica seria algo asi

select tabla char ordenala por id desc limitalo 5 (agarra valores 5,10) y que los muestre de forma ASC
Y a mí me parece que su problema tiene que ver más con el uso de LIMIT y sus dos parámetros (inicio y número de registros)
http://dev.mysql.com/doc/refman/5.0/es/select.html

SELECT * FROM table LIMIT 4, 6; # recupera las filas 5-10

Tal vez quien me he perdido he sido yo...
hyezs deberá aclararnos esto.

Etiquetas: query, select, tabla
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 06:04.