2008-09-22 11 views

Respuesta

45
SELECT * FROM table_name ORDER BY auto_incremented_id DESC LIMIT n 
2

Uso ORDER BY para ordenar por la columna de identificador con el fin DESC, y limitar el uso para especificar el número de resultados que desea.

4

Tal vez pedirlo por la única descendente Identificación:

SELECT * FROM table ORDER BY id DESC LIMIT n 

El único problema con esto es que es posible que desee seleccionar en un orden diferente, y este problema me ha hecho que seleccionar las últimas filas de contar el número de filas y luego seleccionarlas usando LIMIT, pero obviamente esa no es una buena solución en su caso.

2

También es probable que desee agregar un índice descendente (o lo que sea que se les llame en mysql) y seleccionarlo rápidamente si es algo que va a hacer a menudo.

16

hecho de la manera correcta para obtener la última n filas con el fin es el uso de una subconsulta:

(SELECT id, title, description FROM my_table ORDER BY id DESC LIMIT 5) 
ORDER BY tbl.id ASC 

Como esta es la única manera que sé que les va a volver en el orden correcto. La respuesta aceptada es en realidad una solución para "Seleccione las primeras 5 filas de un conjunto ordenado por ID descendente", pero eso es probablemente lo que necesita.

+3

Quizás tarde, pero acabo de encontrar desde [aquí] (http://www.mysqlfaqs.net/mysql-faqs/Tricky-Select-Queries/How-to-get-last-top-records-in -ordenar-orden) que simplemente puede omitir la selección externa y el alias, y solo tiene: '(SELECCIONAR * FROM table ORDER BY id DESC LIMIT 50) ORDER BY id ASC;' aunque puede ser un poco confuso de leer. – DiegoDD

+0

@DiegoDD que es realmente limpio, es mucho mejor que la solución de la mina y no es tan confuso, lo agregaré a mi respuesta :) –

1

Esto es mucho más rápido cuando tiene mesas grandes porque no tiene que pedir una mesa completa. Solo usa id como un identificador de fila único. Esto también es más eficiente cuando tiene grandes cantidades de datos en algunas colum (s) como imágenes, por ejemplo (blobs). El orden en este caso puede consumir mucho tiempo y datos.

select * 
from TableName 
where id > ((select max(id) from TableName)-(NumberOfRowsYouWant+1)) 
order by id desc|asc 

El único problema es si elimina las filas en el intervalo que desee. En este caso, no obtendrás el verdadero "NumberOfRowsYouWant".

También puede usarlo fácilmente para seleccionar n filas para cada página simplemente multiplicando (NumberOfRowsYouWant + 1) por número de página cuando necesite mostrar la tabla al revés en varias páginas web.

4

(Similar a la respuesta "marco" s,)
mi favorito es el máximo() - Función de MySQL también, de una forma sencilla de una sola línea, pero hay otras formas de seguro:

SELECT whatever FROM mytable WHERE id > (SELECT max(id)-10 FROM mytable); 

... y obtiene "la última identificación menos 10", normalmente las últimas 10 entradas de esa tabla.

Es una manera corta de evitar el error 1111 ("Uso no válido de la función de grupo") no solo si hay una fila auto_increment (aquí id).
La función max() se puede usar de muchas maneras.

+0

Analicé todas las respuestas con mi tabla de más de un millón de resultados y esta fue la más rápida . En realidad, 10 milisegundos más rápido que ordenar por ID. –

0

Aquí puede cambiar el nombre de la tabla y el nombre de la columna según sus necesidades. si quiere mostrar la última fila de 10, ponga n = 10, n = 20 o n = 30 ... etc. según sus necesidades.

seleccionar * de (seleccionar * de empleado Ordenar por emp_id límite desc n) una Orden por asc emp_id;

Cuestiones relacionadas