Maison >base de données >tutoriel mysql >Comment interroger efficacement un élément aléatoire de chaque catégorie dans MySQL ?
Requête d'éléments aléatoires dans chaque catégorie MYSQL
Les systèmes de bases de données rencontrent des scénarios dans lesquels la sélection d'un enregistrement aléatoire dans chaque catégorie est courante. Considérons une base de données avec une table Items contenant des éléments appartenant à différentes catégories, chacune avec son identifiant unique. Et un tableau Catégories distinct fournit les noms et identifiants des catégories.
Pour sélectionner un seul élément aléatoire par catégorie, nous pouvons tirer parti d'une combinaison de regroupement et de randomisation.
Tout d'abord, nous rejoignons les éléments et Tableaux de catégories sur l'ID de catégorie pour associer les éléments à leurs catégories respectives :
SELECT c.id AS cid, c.category, i.id AS iid, i.name FROM categories c INNER JOIN items i ON c.id = i.category
Cela donne un ensemble de résultats contenant tous les éléments avec leur catégorie associée. informations.
Maintenant, pour randomiser la sélection d'articles, nous ajoutons ORDER BY RAND():
SELECT c.id AS cid, c.category, i.id AS iid, i.name FROM categories c INNER JOIN items i ON c.id = i.category ORDER BY RAND()
Pour limiter chaque catégorie à un article, nous utilisons un GROUP BY partiel:
SELECT * FROM ( SELECT c.id AS cid, c.category, i.id AS iid, i.name FROM categories c INNER JOIN items i ON c.id = i.category ORDER BY RAND() ) AS shuffled_items GROUP BY cid
Cette requête regroupe efficacement les éléments triés aléatoirement par ID de catégorie et sélectionne le premier élément de chaque groupe. L'opération de regroupement intervient avant le tri, l'ordre aléatoire est donc conservé au sein de chaque catégorie.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!