Voici un moyen rapide de renvoyer des lignes aléatoires à partir d'une table dans MariaDB.
Supposons que nous ayons une table appelée Pets
avec les données suivantes :
SELECT
PetId,
PetName
FROM Pets;
Résultat :
+-------+---------+ | PetId | PetName | +-------+---------+ | 1 | Fluffy | | 2 | Fetch | | 3 | Scratch | | 4 | Wag | | 5 | Tweet | | 6 | Fluffy | | 7 | Bark | | 8 | Meow | +-------+---------+
Nous pouvons utiliser le RAND()
fonction en conjonction avec un ORDER BY
clause et la LIMIT
mot-clé pour renvoyer des lignes aléatoires de cette table.
Exemple :
SELECT
PetId,
PetName
FROM Pets
ORDER BY RAND()
LIMIT 5;
Exemple de résultat :
+-------+---------+ | PetId | PetName | +-------+---------+ | 5 | Tweet | | 7 | Bark | | 1 | Fluffy | | 8 | Meow | | 3 | Scratch | +-------+---------+
Et si je le relance, j'obtiens ceci :
+-------+---------+ | PetId | PetName | +-------+---------+ | 3 | Scratch | | 8 | Meow | | 4 | Wag | | 7 | Bark | | 6 | Fluffy | +-------+---------+
Et ainsi de suite…
Gardez à l'esprit que cela est assez intensif et ne doit pas être utilisé sur des tables plus grandes.
Lors de l'utilisation de cette technique, MariaDB lit toutes les lignes de la table, génère une valeur aléatoire pour chacune d'elles, les ordonne, et finalement applique le LIMIT
clause. Cela entraînera une requête très lente sur les grandes tables.
Voir Data Sampling:Techniques for Efficiently Finding a Random Row sur le site Web MariaDB pour des techniques plus adaptées aux grandes tables.