Seleccione las últimas N filas de MySQL

121

Quiero seleccionar las últimas 50 filas de la base de datos MySQL dentro de la columna denominada id, que es la clave principal . El objetivo es que las filas se clasifiquen por id en el orden ASC , por eso esta consulta no funciona

SELECT 
    *
FROM
    `table`
ORDER BY id DESC
LIMIT 50;

También es notable que las filas puedan manipularse (eliminarse) y es por eso que la siguiente consulta tampoco funciona

SELECT 
    *
FROM
    `table`
WHERE
    id > ((SELECT 
            MAX(id)
        FROM
            chat) - 50)
ORDER BY id ASC;

Pregunta : ¿Cómo es posible recuperar las últimas N filas de la base de datos MySQL que se pueden manipular y estar en orden ASC?

nanobash
fuente

Respuestas:

236

Puede hacerlo con una subconsulta:

SELECT * FROM (
    SELECT * FROM table ORDER BY id DESC LIMIT 50
) sub
ORDER BY id ASC

Esto seleccionará las últimas 50 filas tabley luego las ordenará en orden ascendente.

muebles nuevos
fuente
5
^ Para su información, sé que este artículo trata sobre MySQL, pero quería advertir que en respuesta al comentario de @ DiegoDD anterior, omitir la selección externa y el alias no parece funcionar en Postgres (9.3.5). Recibo un 'Error: no se permiten múltiples cláusulas ORDER BY'. Sin embargo, la respuesta aceptada funciona como se esperaba en Postgres
allenwlee
¡Gracias por esto! Esta consulta me ayudó a solucionar mi problema. He estado buscando esto durante horas
Arshad
1
¿Cómo puedo aplicar esta consulta con JOINS?
GYaN
@GYaN agrega uniones en la subconsulta interna
sheikh hamza
9
SELECT * FROM table ORDER BY id DESC,datechat desc LIMIT 50

Si tiene un campo de fecha que está almacenando la fecha (y la hora) en la que se envió el chat o cualquier campo que se rellene de forma incremental (orden por DESC) o desinscrementalmente (orden por ASC) de datos por fila, colóquelo como segunda columna en que los datos deben ser ordenados.

¡Eso es lo que funcionó para mí! espero que ayude !!!!

ayudante
fuente
7
SELECT * FROM table ORDER BY id DESC LIMIT 50

guardar recursos hacer una consulta, no hay necesidad de hacer consultas anidadas

Zumbido
fuente
1
Su consulta devolverá los resultados a la inversa (ID descendente). La consulta de @ newfurniturey obtendrá las ÚLTIMAS filas insertadas ( LIMITen ID descendente), y el resultado final tendrá ID ascendentes.
Robin Kanters
1
Su solución no obtendrá los resultados en el orden correcto, sino que los invertirá, por lo tanto, la necesidad de otro pedido para volver a colocarlos en el orden correcto
Cobra47
1
Pero luego simplemente haz un php array_reverse () o lo que sea el equivalente en el lenguaje de programación que elijas. La base de datos no necesita hacer ese trabajo.
Joe
6
@Joe No hay nada en la pregunta que indique que se está utilizando un lenguaje de secuencias de comandos, por lo que no es una suposición segura.
Nick Coons
La respuesta esperada ya debería estar ordenada usando solo la consulta de la base de datos.
d4ryl3
-2
select * from Table ORDER BY id LIMIT 30

Notas: * iddebe ser único. * Puede controlar el número de filas devueltas reemplazando el 30en la consulta

Darshan
fuente
1
¿Podría explicar su solución? La explicación entre corchetes parece ser un código, coloque una oración completa arriba / abajo de su código. Gracias
deHaar