2010-04-25 16 views
15

¿Está disponible para escribir una consulta para usar el mismo "LIMIT (from), (count)", pero el resultado es al revés?Límite de MySQL desde orden descendente

En el ejemplo, si tengo 8 filas de la tabla y quiero conseguir 5 filas en dos pasos yo: primer paso de consulta:

select * from table limit 0, 5 

primer resultado paso:

first 5 rows; 

segunda consulta paso:

select * from table limit 5, 5 

segundo resultado del paso:

last 3 rows; 

Pero quiero obtenerlo al revés. Quiero decir desde el primer paso quiero últimas 3 filas y de la segunda quiero 5 primeras filas. Gracias por su respuesta

Respuesta

24

No, usted no debe hacer esto. Sin una cláusula ORDER BY, no debe confiar en que el orden de los resultados sea el mismo desde la consulta hasta la consulta. Puede funcionar bien durante la prueba, pero el orden es indeterminado y podría romperse más tarde. Use una orden de.

SELECT * FROM table1 ORDER BY id LIMIT 5 

Por cierto, otra manera de conseguir los últimos 3 filas es invertir el orden y seleccione las tres primeras filas:

SELECT * FROM table1 ORDER BY id DESC LIMIT 3 

Esto siempre funcionará incluso si el número de filas de la conjunto de resultados no es siempre 8.

+0

hecho. Al revés no tiene sentido si el resultado no está ordenado. – extraneon

+0

entonces ordene por aplica antes del limite? – faya

+0

@faya: En un caso simple como este, sí. –

0

sí, se puede intercambiar estos 2 consultas

select * from table limit 5, 5 

select * from table limit 0, 5 
0

De esta manera es comparativamente más fácil

SELECT doc_id,serial_number,status FROM date_time ORDER BY date_time DESC LIMIT 0,1;