por - order by mysql alfabeticamente
MYSQL-ORDENAR POR Y LIMITE (9)
Al igual que @James dice, ordenará todos los registros y luego obtendrá las primeras 20 filas.
Como es así, está garantizado que obtendrá los 20 primeros artículos publicados, los más nuevos no se mostrarán.
En su situación, le recomiendo que agregue desc
a order by publish_date
, si desea los artículos más nuevos, el primero será el primero.
Si necesita mantener el resultado en orden ascendente, y aún así solo desea los 10 artículos más nuevos, puede pedir a mysql que ordene su resultado dos veces.
Esta consulta a continuación ordenará el resultado descendente y limitará el resultado a 10 (es decir, la consulta dentro del paréntesis). Todavía se ordenará en orden descendente, y no estamos satisfechos con eso, por lo que le pedimos a mysql que lo clasifique una vez más. Ahora tenemos el resultado más reciente en la última fila.
select t.article
from
(select article, publish_date
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Si necesitas todas las columnas, se hace de esta manera:
select t.*
from
(select *
from table1
order by publish_date desc limit 10) t
order by t.publish_date asc;
Utilizo esta técnica cuando escribo consultas manualmente para examinar la base de datos en busca de varias cosas. No lo he usado en un entorno de producción, pero ahora cuando lo marcé en un banco, la clasificación adicional no afecta el rendimiento.
Tengo una consulta que se parece a esto:
SELECT article FROM table1 ORDER BY publish_date LIMIT 20
¿Cómo funciona ORDER BY? ¿ publish_date
todos los registros, luego obtendrá los primeros 20 o obtendrá 20 registros y los ordenará por el campo publish_date
?
Si es el último, no está garantizado para obtener los 20 artículos más recientes.
LIMIT se aplica generalmente como la última operación, por lo que el resultado primero se ordenará y luego se limitará a 20. De hecho, la clasificación se detendrá tan pronto como se encuentren los primeros 20 resultados ordenados.
La cláusula LIMIT se puede usar para restringir el número de filas devueltas por la instrucción SELECT. LIMIT toma uno o dos argumentos numéricos, que deben ser constantes enteras no negativas (excepto cuando se usan sentencias preparadas).
Con dos argumentos, el primer argumento especifica el desplazamiento de la primera fila a devolver, y el segundo especifica el número máximo de filas a devolver. El desplazamiento de la fila inicial es 0 (no 1):
SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15
Para recuperar todas las filas desde un cierto desplazamiento hasta el final del conjunto de resultados, puede usar un número grande para el segundo parámetro. Esta declaración recupera todas las filas de la fila 96 a la última:
SELECT * FROM tbl LIMIT 95,18446744073709551615;
Con un argumento, el valor especifica el número de filas a devolver desde el principio del conjunto de resultados:
SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows
En otras palabras, LIMIT row_count es equivalente a LIMIT 0, row_count.
Todos los detalles en: http://dev.mysql.com/doc/refman/5.0/en/select.html
Primero ordenará, luego obtendrá los primeros 20. Una base de datos también procesará cualquier cosa en la cláusula WHERE
antes de ORDER BY
.
Puede agregar [asc] o [desc] al final de la orden para obtener los registros más antiguos o más recientes
Por ejemplo, esto le dará los últimos registros primero
ORDER BY stamp DESC
Agregue la cláusula LIMIT
después de ORDER BY
Puede usar este código SELECT article FROM table1 ORDER BY publish_date LIMIT 0,10
donde 0 es un límite de inicio de registro y 10 de registro
Si hay un índice adecuado, en este caso en el campo publish_date
, MySQL no necesita escanear todo el índice para obtener los 20 registros solicitados; los 20 registros se encontrarán al inicio del índice. Pero si no hay un índice adecuado, entonces será necesario un análisis completo de la tabla.
Hay un artículo de MySQL Performance Blog de 2009 sobre esto.
También la sintaxis de LIMIT es diferente según las bases de datos, por ejemplo:
mysql
- limite 1, 2
postgres
- LIMIT 2 OFFSET 1
SELECT * FROM table1 ORDER BY id asc LIMIT 5 OFFSET 0
La consulta debe ser así.