124 votes

Requête SQL pour retourner les lignes dans un ordre aléatoire

Salut
Est-il possible d'écrire la requête SQL qui retourne les lignes de la table dans un ordre aléatoire à chaque fois que l'exécution de la requête?

206voto

Dave Barker Points 3068
SELECT * FROM table
ORDER BY NEWID()

28voto

Alec Smart Points 14075

Bien que pas le plus efficace:

SELECT quote FROM quotes ORDER BY RAND()

C'est une meilleure solution http://www.titov.net/2005/09/21/do-not-use-order-by-rand-or-how-to-get-random-rows-from-table/

12voto

devstuff Points 5881

La méthode habituelle consiste à utiliser la fonction NEWID (), ce qui génère un GUID unique. Donc,

SELECT * FROM dbo.Foo ORDER BY NEWID();

2voto

s01ipsist Points 1104

(Malgré les balises) la question elle-même est ambiguë sur le serveur de base de données est utilisé de sorte que vous pourriez vous retrouver ici, désireux de répondre à un autre serveur. Pour les autres serveurs de base de données (MySQL, PostgreSQL,IBM DB2 et Oracle) jetez un oeil à http://www.petefreitag.com/item/466.cfm

-1voto

nilamo Points 1341

Pour être efficace, et au hasard, il pourrait être préférable d'avoir deux requêtes différentes.

Quelque chose comme...

SÉLECTIONNEZ table_id DE table

Ensuite, dans la langue de votre choix, choisissez un id aléatoire, puis tirez sur la ligne de données.

SELECT * from table where table_id = $rand_id

Mais ce n'est pas vraiment une bonne idée si vous vous attendez à avoir beaucoup de lignes dans la table. Il serait mieux si vous mettez une sorte de limite à ce que vous choisissez au hasard. Pour les publications, peut-être choisir au hasard à partir de seulement les articles publiés dans la dernière année.

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