Résumé : dans ce tutoriel, vous apprendrez différentes techniques pour sélectionner des enregistrements aléatoires à partir d’une table de base de données dans MySQL.

Parfois, vous devez sélectionner des enregistrements aléatoires à partir d’une table, par exemple :

  • Sélectionner des articles aléatoires dans un blog et les afficher dans la barre latérale.
  • Sélectionner une citation aléatoire pour afficher le widget « citation du jour ».
  • Sélectionner des images aléatoires dans une galerie et les utiliser comme images vedettes.

MySQL sélectionne des enregistrements aléatoires en utilisant ORDER BY RAND()

MySQL n’a pas d’instruction intégrée pour sélectionner des lignes aléatoires dans une table. Pour accomplir cela, vous utilisez la fonction RAND().

La requête suivante sélectionne une ligne aléatoire dans une table de base de données:

Code language: SQL (Structured Query Language) (sql)

Examinons la requête plus en détail.

  • La fonction RAND() génère une valeur aléatoire pour chaque ligne de la table.
  • La clause ORDER BY trie toutes les lignes du tableau par le nombre aléatoire généré par la fonction RAND().
  • La clause LIMIT prend la première ligne du jeu de résultats triée aléatoirement.

Si vous voulez sélectionner Ndes enregistrements aléatoires dans une table de base de données, vous devez modifier la clause LIMIT comme suit :

Code language: SQL (Structured Query Language) (sql)

Voir la table customers suivante de la base de données exemple.

L’exemple suivant sélectionne cinq clients au hasard dans la table customers:

Code language: SQL (Structured Query Language) (sql)

Try It Out

Notez que vous pouvez obtenir un ensemble de résultats différent parce qu’il est aléatoire.

Cette technique fonctionne très bien avec une petite table. Cependant, elle sera lente pour la grande table parce que MySQL doit trier la table entière pour sélectionner les aléatoires.

La vitesse de la requête dépend également du nombre de lignes de la table. Plus la table a de lignes, plus il faut de temps pour générer le nombre aléatoire pour chaque ligne.

MySQL sélectionne des enregistrements aléatoires en utilisant la clause INNER JOIN

Cette technique nécessite que la table ait un champ de clé primaire auto-incrémenté et qu’il n’y ait pas de vide dans la séquence.

La requête suivante génère un nombre aléatoire basé sur la colonne de clé primaire :

Code language: SQL (Structured Query Language) (sql)

Nous pouvons joindre la table avec l’ensemble de résultats renvoyé par la requête ci-dessus comme suit :

Code language: SQL (Structured Query Language) (sql)

En utilisant cette technique, vous devez exécuter la requête plusieurs fois pour obtenir plus d’une ligne aléatoire car si vous augmentez la limite, la requête ne vous donnera que des lignes séquentielles qui commencent à partir de la ligne sélectionnée au hasard.

La requête suivante renvoie un client aléatoire de la table customers.

Code language: SQL (Structured Query Language) (sql)

Essayez-le

MySQL select random records using variables

Dans le cas où, la table a la colonne id avec les valeurs qui tombent dans une plage 1..N et il n’y a pas d’écart dans la plage, vous pouvez utiliser la technique suivante:

  • D’abord, sélectionnez des nombres aléatoires dans la plage 1..N.
  • Deuxièmement, sélectionnez les enregistrements en fonction des nombres aléatoires.

L’instruction suivante vous aide à accomplir ceci:

Code language: SQL (Structured Query Language) (sql)

Notez que les variables définies par l’utilisateur sont spécifiques à la connexion. Cela signifie que cette technique ne peut pas être utilisée avec le pooling de connexion. En outre, la clé primaire doit être de type entier et ses valeurs doivent être dans la séquence sans lacunes.

Dans ce tutoriel, nous vous avons montré plusieurs techniques pour sélectionner des enregistrements aléatoires dans une table.

  • Ce tutoriel vous a-t-il été utile ?
  • OuiNon

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.