Maison >base de données >tutoriel mysql >Comment sélectionner un enregistrement aléatoire de chaque catégorie dans une base de données MySQL ?

Comment sélectionner un enregistrement aléatoire de chaque catégorie dans une base de données MySQL ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-28 02:02:14466parcourir

How to Select One Random Record from Each Category in a MySQL Database?

Randomisation des sélections de bases de données dans plusieurs catégories

Le défi présenté ici est de récupérer un seul enregistrement aléatoire de chaque catégorie dans une base de données. La table Items héberge ces enregistrements, chacun affecté à une catégorie spécifiée par une table Categories correspondante.

Pour aborder cette tâche, on peut exploiter le caractère aléatoire inhérent à MySQL avec la fonction RAND() et la clause LIMIT 1. Cependant, l'aspect unique ici est la nécessité de sélectionner un enregistrement aléatoire pour chaque catégorie distincte.

La requête suivante relève ce défi avec élégance :

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

La structure de cette requête permet de récupérer un enregistrement aléatoire de chaque catégorie :

  • La requête principale utilise une sous-requête pour récupérer tous les éléments joints à leurs catégories respectives, triés aléatoirement.
  • La sous-requête sert de base au filtrage ultérieur utilisé par le GROUP BY partiel. Cela garantit un enregistrement par catégorie en regroupant les « shuffled_items » en fonction de l'ID de catégorie (cid).

Bien que cette approche ne puisse pas se targuer d'une rapidité exceptionnelle, elle relève efficacement le défi de la sélection aléatoire d'enregistrements sur plusieurs catégories. Des suggestions alternatives d'optimisation sont les bienvenues, améliorant encore l'utilité de cette requête.

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