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
Libérer: 2025-01-04 14:19:40
original
790 Les gens l'ont consulté

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

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

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!

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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal