Est-il possible d'écrire une requête SQL qui retourne les lignes de table dans un ordre aléatoire chaque fois que la requête est exécutée?Retour des lignes dans un ordre aléatoire
Répondre
SELECT * FROM table
ORDER BY NEWID()
C'est la solution la plus simple:
SELECT quote FROM quotes ORDER BY RAND()
Bien qu'il ne soit pas le plus efficace. This one est une meilleure solution.
Assez sûr qui ne fonctionne pas. Le RAND() dans la clause ORDER BY n'est calculé qu'une seule fois, donc vous obtenez un ordre naturel. Pour le tester, essayez ORDER BY RAND(), 1 et vous obtiendrez une liste de vos citations commandées par la première colonne (au moins dans SQL Server 2005). –
Hm, je suis assez sûr que cela a fonctionné pour moi dans le passé, peut-être que cela dépend du produit que vous utilisez. –
Il ne semble pas que cela fonctionne sur MS SQL. –
La méthode habituelle consiste à utiliser la fonction NEWID(), qui génère un GUID unique. Donc,
SELECT * FROM dbo.Foo ORDER BY NEWID();
Le choix évident, la fonction RAND() ne fonctionne pas directement, mais voici une solution de contournement: http://weblogs.sqlteam.com/jeffs/archive/2004/11/22/2927.aspx – devstuff
+1 cela fonctionne, mais Dave Barker était plus rapide :) –
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 choisie, choisir un identifiant aléatoire, puis tirer 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 la table. Ce serait mieux si vous mettez une sorte de limite sur ce que vous choisissez au hasard. Pour les publications, choisissez peut-être aléatoirement 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);
C'est ce que vous avez besoin:
SELECT * FROM COMMANDE nom_table PAR RAND() LIMIT 1
La question a été balisée SQL Server. Le RAND() ne fonctionne pas et la limite n'est pas reconnue, et la question ne demande pas de limiter les résultats à un seul enregistrement. – LarsTech
- 1. Comment sélectionner des colonnes de la table dans un ordre aléatoire dans TSQL
- 2. Visiter les points dans un triangle dans un ordre aléatoire
- 3. Ruby - Exécution de tests dans un ordre aléatoire avec rake
- 4. Spécification des lignes de retour dans LINQ2DataSet
- 5. Puis-je faire exécuter des tests par NUnit dans un ordre aléatoire?
- 6. Sélection aléatoire de lignes avec MySQL
- 7. liste aléatoire des règles
- 8. Animer des lignes dans un NSTableView
- 9. Récupération des véritables index de lignes de lignes sélectionnées dans JTable lorsque les colonnes sont classées par ordre alphabétique
- 10. PHP (dossier) Liste des fichiers dans un ordre alphabétique?
- 11. jquery: obtenir des éléments de xml dans un ordre différent
- 12. Ordre inverse des barres dans un Flex BarChart
- 13. bon ordre des règles de réécriture dans un fichier htaccess
- 14. Générer un terrain aléatoire dans Blender3D
- 15. Comptage des lignes dans un TDbGrid
- 16. Ordre des articles comparés?
- 17. Ordre d'exécution des composants dans Wix
- 18. "Ordre des onglets" dans une application rails
- 19. Ordre des champs dans Dynamic Data?
- 20. Réaffectation aléatoire des valeurs d'une table PK
- 21. Impossible d'insérer des entrées d'une relation plusieurs-à-plusieurs dans Entity Framework dans un ordre spécifique
- 22. Suppression des lignes en double dans Postgres
- 23. booléenne Expression - Ordre des opérations
- 24. Ordre des onglets VSTO Excel
- 25. Ordre des éléments HTML empilés
- 26. Retour de lignes à partir d'un service Web .NET
- 27. Combiner des lignes/concaténer des lignes
- 28. Sélection des lignes dans Tablesorter
- 29. phrase aléatoire dans une liste
- 30. PostgreSQL changeant l'ordre des lignes retournées
Pour MySQL, utilisez' ORDER BY uuid() '. (... pour ceux qui arrivent sur cette page via une recherche générique, comme moi!) –
Cela fonctionne, mais est incroyablement lent sur la table que je choisis (14M + lignes). Est-ce prévisible? AFAIK, la table est correctement indexée. –
@John - Vous sélectionnez 14 millions d'enregistrements et de générer et de commander par un identifiant unique. Peut-être que vous êtes seulement après une seule rangée aléatoire? Dans ce cas, sélectionnez SELECT TOP 1 FROM table ORDER BY NEWID() –