Maison > Article > base de données > Comment sélectionner efficacement des éléments appartenant à plusieurs catégories dans une table MySQL ?
Identification des éléments dans plusieurs catégories
Problème :
Dans une table MySQL contenant des informations associatives (item_id etcategory_id), l'objectif est de sélectionner uniquement les éléments présents dans un ensemble spécifié de catégories.
Exemple :
Étant donné le tableau :
+-----------------------+ | item_id | category_id | +-----------------------+ | 1 | 200 | | 1 | 201 | | 1 | 202 | | 2 | 201 | | 2 | 202 | | 3 | 202 | | 3 | 203 | | 4 | 201 | | 4 | 207 | +-----------------------+
Si les ID de catégorie 201 et 202 sont transmis, la requête ne doit renvoyer que les éléments 1 et 2, car ce sont les seuls présents dans les deux catégories.
Solution 1 : Auto -Join
SELECT c1.item_id FROM item_category AS c1 INNER JOIN item_category AS c2 ON c1.item_id = c2.item_id WHERE c1.category_id = 201 AND c2.category_id = 202
Cette technique nécessite une auto-jointure qui crée un produit cartésien de la table, ce qui peut être inefficace pour les grands ensembles de données.
Solution 2 : GROUP BY et HAVING
SELECT c.item_id, COUNT(*) AS cat_count FROM item_category AS c WHERE c.category_id IN (201,202) GROUP BY c.item_id HAVING cat_count = 2
Cette solution utilise GROUP BY et HAVING pour compter le nombre de catégories pour chaque élément et filtrer celles qui correspondent à l'ensemble spécifié. Il fonctionne mieux pour les ensembles de données plus volumineux.
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!