Maison >base de données >tutoriel mysql >Comment sélectionner au hasard un élément de chaque catégorie dans MySQL ?

Comment sélectionner au hasard un élément de chaque catégorie dans MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2025-01-04 14:19:40793parcourir

How to Randomly Select One Item from Each Category in MySQL?

Sélection aléatoire d'éléments à partir de catégories distinctes à l'aide de MySQL

Dans un scénario de base de données impliquant une table « Articles » avec une colonne de catégorisation, la tâche de La sélection aléatoire d'un seul élément de chaque catégorie pose un défi. Pour résoudre ce problème, explorons les approches suivantes utilisant des requêtes MySQL :

Méthode 1 : jointure interne et regroupement partiel

Cette requête récupère tous les éléments joints avec des catégories triées de manière aléatoire :

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 restreindre chaque catégorie à un seul élément, nous enveloppons cette requête dans un GROUPE partiel BY :

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

Considérations

Notez que le regroupement est effectué avant le tri puisque la requête inclut à la fois une clause GROUP BY et ORDER BY. Par conséquent, la requête externe regroupe les résultats après que la requête interne les trie. Cette approche à deux requêtes garantit que chaque catégorie ne contient qu'un seul élément aléatoire.

Bien que cette requête fournisse une solution, il est important de reconnaître ses limites potentielles en termes d'efficacité. Nous apprécions toutes les suggestions d’optimisation des performances.

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