Est-il possible d'écrire une requête SQL qui renvoie les lignes de la table dans un ordre aléatoire à chaque exécution de la requête?
SELECT * FROM table
ORDER BY NEWID()
C'est la solution la plus simple:
SELECT quote FROM quotes ORDER BY Rand()
Bien que ce ne soit pas le plus efficace. Celui-ci est une meilleure solution.
La méthode habituelle consiste à utiliser la fonction NEWID (), qui génère un GUID unique. Alors,
SELECT * FROM dbo.Foo ORDER BY NEWID();
Pour être efficace et aléatoire, il peut être préférable d’avoir deux requêtes différentes.
Quelque chose comme...
SELECT table_id FROM table
Ensuite, dans la langue de votre choix, choisissez un identifiant aléatoire, puis extrayez les données de cette ligne.
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 le tableau. Il serait préférable que vous fixiez une limite à ce que vous choisissez au hasard. Pour les publications, choisissez au hasard parmi les articles publiés au cours de la dernière année.
Voici un exemple ( source ):
SET @randomId = Cast(((@maxValue + 1) - @minValue) * Rand() + @minValue AS tinyint);