291 votes

MYSQL - ORDER BY & LIMIT

J'ai une requête qui ressemble à ceci:

SELECT article FROM table1 ORDER BY publish_date LIMIT 20

Comment est-ce que ORDER BY fonctionne? Va-t-il commander tous les enregistrements, puis obtenir les 20 premiers, ou va-t-il obtenir 20 enregistrements et les commander par le champ publish_date ?

Si c'est le dernier, vous n'êtes pas sûr d'obtenir les 20 derniers articles.

286voto

James Points 1619

Il ordonnera d' abord, puis obtenir le premier 20. Une base de données traitera également quelque chose dans le WHERE clause avant ORDER BY .

41voto

bensiu Points 6306

La clause LIMIT peuvent être utilisés pour limiter le nombre de lignes retournées par l'instruction SELECT. LIMIT a un ou deux arguments numériques, qui doivent tous deux être entier non négatif constantes (sauf lors de l'utilisation des requêtes préparées).

Avec deux arguments, le premier argument spécifie le décalage de la première ligne pour le retour, et le second indique le nombre maximal de lignes à retourner. Le décalage de la première ligne est 0 (pas de 1):

SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15

Pour récupérer toutes les lignes à partir d'un certain décalage jusqu'à la fin de l'ensemble de résultats, vous pouvez utiliser un grand nombre pour le deuxième paramètre. Cette instruction permet d'extraire toutes les lignes de la 96e de ligne à la dernière:

SELECT * FROM tbl LIMIT 95,18446744073709551615;

Avec un argument, la valeur spécifie le nombre de lignes à retourner dès le début du jeu de résultats:

SELECT * FROM tbl LIMIT 5; # Retrieve first 5 rows

En d'autres termes, la LIMITE de row_count est équivalente à la LIMITE de 0, row_count.

Tous les détails sur: http://dev.mysql.com/doc/refman/5.0/en/select.html

10voto

Paul Points 37

Vous pouvez ajouter [asc] ou [desc] à la fin de la commande pour obtenir les premiers enregistrements ou les derniers enregistrements.

Par exemple, cela vous donnera les derniers enregistrements en premier

 ORDER BY stamp DESC
 

Append le LIMIT clause après ORDER BY

7voto

martin clayton Points 41306

S'il existe un index approprié, dans ce cas sur le champ publish_date , alors MySQL n'a pas besoin d'analyser l'index complet pour obtenir les 20 enregistrements demandés - les 20 enregistrements seront trouvés au début de l'index. Mais s’il n’ya pas d’index approprié, une analyse complète de la table sera nécessaire.

Il y a un article de MySQL Performance Blog de 2009 sur ce sujet.

6voto

gaurangkathiriya Points 366

vous devez utiliser ce code SELECT article FROM table1 ORDER BY publish_date LIMIT 0,10 où 0 est une limite de début d'enregistrement et 10 nombre d'enregistrements

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X