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
Libérer: 2024-12-28 00:23:09
original
668 Les gens l'ont consulté

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
Copier après la connexion

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()
Copier après la connexion

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
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal