Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/11/2011, 08:10
quimfv
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: ordenar registros con limites en mysql

....ORDER BY contenido desc LIMIT $principio, $registros...

Creo que tienes una confusion entre registros antiguos, limit y order by....

Supongamos que tienes $principio=0 y $registros=3

y tienes los siguientes registros

id----------fecha----------contenido
1----------2011-01-01---Z
2----------2011-01-01---A
3----------2011-01-03---B
4----------2011-01-04---M

Por ORDER BY contenido desc (orden alfabetico de contenido descendiente)

1----------2011-01-01---Z
4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-01---A

por $principio=0 y $registros=3 (des del primero dame tres)

1----------2011-01-01---Z
4----------2011-01-04---M
3----------2011-01-03---B

Si los que quieres son los tres últimos debes ordenar por fecha

ORDER BY fecha desc

4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-01---A
1----------2011-01-01---Z


o

4----------2011-01-04---M
3----------2011-01-03---B
1----------2011-01-01---Z
2----------2011-01-01---A


(como no le indicas nada sql hará lo que le parezca en funcion del estado de los datos, incluso podria ordenarlos una vez de una manera y otra de la otra).


por $principio=0 y $registros=3 (des del primero dame tres)

4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-02---A

o

4----------2011-01-04---M
3----------2011-01-03---B
1----------2011-01-01---Z

Si quieres que dentro de una misma fecha se ordene alfabeticamente

ORDER BY fecha desc, contenido ASC

en este caso seguro que daria

4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-01---A
1----------2011-01-01---Z


y por tanto siempre obendrias

4----------2011-01-04---M
3----------2011-01-03---B
2----------2011-01-02---A

al limitar por 0,3

Cita:
...tampoco encuentro una lógica en su comportamiento...
espero que la intuyas.

El tema és que en bbdd el orden de entrada de datos no es relevante, el motor los listara de la forma (orden) que le sea más eficiente. Si queremos un orden concreto debemos especificarlo.

Limit actua sobre el orden en que reciba los datos... luego el primer registro no es el primer registro entrado si no el primer registro segun el orden en que se hayan seleccionado.... y repito si no se especifica el orden el motor de bbdd hace lo que quiere o lo que puede para obtener los datos lo más rapido posible... eso no siempre genera la salida en el mismo orden y menos en el orden en que estamos pensando si no se lo pedimos...


Ufff que rollo me ha salido espero que te haya convencido.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 14/11/2011 a las 08:19