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

ORDER y LIMIT

Estas en el tema de ORDER y LIMIT en el foro de Mysql en Foros del Web. Tengo una duda, es posible tras hacer un order por fecha y cojer los ultimos 50 mensajes, reordenar de forma ascendente? "SELECT cm.ID, cm.MENSAJE, cm.FECHA, ...
  #1 (permalink)  
Antiguo 23/02/2011, 17:45
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
ORDER y LIMIT

Tengo una duda, es posible tras hacer un order por fecha y cojer los ultimos 50 mensajes, reordenar de forma ascendente?

"SELECT cm.ID, cm.MENSAJE, cm.FECHA, ua.ID_USUARIO, ua.NOMBRE, ua.APELLIDOS FROM chat_mensajes cm, usuarios_ampliado ua WHERE cm.ID_CHAT = '1' AND cm.ID_USUARIO = ua.ID_USUARIO AND VISTO = 1 ORDER BY cm.FECHA DESC LIMIT 50"


Me gustaria que tras seleccionar esos ultimos 50 mensajes siguiesen en el orden ascendente predeterminado.

Un saludo.
  #2 (permalink)  
Antiguo 23/02/2011, 18:13
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ORDER y LIMIT

Debe hacerse con una subconsulta:

Código MySQL:
Ver original
  1.    (SELECT
  2.       cm.ID,
  3.       cm.MENSAJE,
  4.       cm.FECHA,
  5.       ua.ID_USUARIO,
  6.       ua.NOMBRE,
  7.       ua.APELLIDOS
  8.    FROM
  9.       chat_mensajes cm INNER JOIN usuarios_ampliado ua ON  cm.ID_USUARIO = ua.ID_USUARIO
  10.    WHERE
  11.       cm.ID_CHAT = '1' AND VISTO = 1
  12.    ORDER BY cm.FECHA DESC
  13.    LIMIT 50) T1
__________________
¿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 23/02/2011, 19:09
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: ORDER y LIMIT

No entiendo como no hay un atributo en el order para hacerlo automaticamente.... si en teoria es solo cambiar el orden de los resultados devueltos...

Perfecto, ademas veo que usaste inner join, Ok. Funciona perfectamente. Gracias!
  #4 (permalink)  
Antiguo 24/02/2011, 05:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: ORDER y LIMIT

Cita:
No entiendo como no hay un atributo en el order para hacerlo automaticamente....
Eso no existe en ningún DBMS que yo conozca, y tampoco tiene razón para existir, por cuanto ya está contemplado en otras formas más eficientes. Agregar esa funcionalidad lo único que logaría es complicar innecesriamente los algorimos de ordenamiento obligando a crear tablas intermedias en el proceso, con una enorme baja de performance global.
No tendría ninguna ventaja, considerando sobre todo que hay formas más eficientes para ello.
El ordenamiento opera en función de lo que le indiques o en su defecto por el orden de la PK y sino, por el orden de las columnas.
Lo que debes comprender es que un ORDER BY es una cláusula que modifica el resultado, y si la consulta la contiene, se suprimen todas las otras condiciones de ordenamiento posible para esa consulta. El único modo de hacer que se vuelva a ordenar es hacer que la consulta genere una tabla derivada... lo que sólo se consigue transformando la consulta base e una subconsulta.

Regla general: no hay que complicar demasiado las cosas.
__________________
¿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 24/02/2011, 15:15
 
Fecha de Ingreso: junio-2009
Mensajes: 309
Antigüedad: 15 años, 5 meses
Puntos: 5
Respuesta: ORDER y LIMIT

muchas gracias, se m escapan algunos detalles pero gracias :)

Etiquetas: limit, order
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 10:16.