2010-02-20 12 views
6

SELECT id FROM tabla LÍMITE 8, 3MySQL revertir el orden sin DESC

resultados en 8,9,10

pero necesito 10,9,8

¿Cómo se puede hacer esto? Si se agrega "ORDER BY DESC id" se pone 3,2,1

+1

Huele a tarea. –

+2

Podría ser, pero la tarea no está prohibida. Él ha demostrado el problema, lo que quiere hacer, lo que intentó, el resultado y explicó por qué eso no es correcto. ¿Qué más quieres? –

+0

Es para paginación de noticias. Pero el problema es que hay dos reyes de las noticias: uno normal y uno pequeño. Cada página debe contener una cantidad fija de noticias normales y cualquier cantidad de pequeñas noticias. Por lo tanto, los límites siempre cambian. – Qiao

Respuesta

6

Ponga su consulta en una subselección y luego invertir el orden en el exterior seleccione: Datos

SELECT id from (
    SELECT id FROM table ORDER BY id LIMIT 8, 3 
) AS T1 ORDER BY id DESC 

prueba:

CREATE TABLE table1 (id INT NOT NULL); 
INSERT INTO table1 (id) VALUES (0),(1),(2),(3),(4),(5),(6),(7),(8),(9),(10),(11); 

SELECT id from (
    SELECT id FROM table1 ORDER BY id LIMIT 8, 3 
) AS T1 ORDER BY id DESC 

Resultado:

10 
9 
8 

Tenga en cuenta que se requiere que el ORDER BY en la subconsulta de lo contrario el orden es indefinido. ¡Gracias a Lasse por señalar esto!

3

En primer lugar, si no está ordenando en absoluto, que tiene 8,9,10 en este momento podría estar relacionado con el índice utilizado. ¿Estás seguro de que esto no va a cambiar en el futuro?

Lo que quiero decir es que, a menos que especifique un pedido, no debe confiar en que sea el que desee.

Así que definitivamente agregaría un pedido a esa selección para especificar lo que desea. De lo contrario, solo dices "dame 3 números de esta tabla", no "dame 3 números de esta tabla según estas reglas". ¿Por qué 3,2,1 está equivocado pero 8,9,10 está en lo correcto? No estás especificando.

De todos modos, para responder a su pregunta, debe ordenar después del límite, lo que significa una subselección:

SELECT id FROM (
    SELECT id FROM table LIMIT 8, 3 
) AS dummy ORDER BY id DESC 

Sin embargo, me gustaría probar este SQL lugar, en relación con la parte de la especificación:

SELECT id FROM (
    SELECT id FROM table ORDER BY id LIMIT 8, 3 
) AS dummy ORDER BY id DESC 
+0

+1: Buen punto acerca de incluir un pedido por en la selección interna. Su pregunta realmente no tiene sentido sin ella: el orden de la consulta interna no está definido sin un orden por. –