Maison >base de données >tutoriel mysql >Comment interroger efficacement un élément aléatoire de chaque catégorie dans MySQL ?

Comment interroger efficacement un élément aléatoire de chaque catégorie dans MySQL ?

DDD
DDDoriginal
2024-12-28 00:23:09667parcourir

How to Efficiently Query One Random Item from Each Category in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn