Maison > base de données > tutoriel mysql > Comment sélectionner efficacement des éléments appartenant à plusieurs catégories dans une table MySQL ?

Comment sélectionner efficacement des éléments appartenant à plusieurs catégories dans une table MySQL ?

Patricia Arquette
Libérer: 2024-10-31 04:11:31
original
377 Les gens l'ont consulté

How to Efficiently Select Items Belonging to Multiple Categories in a MySQL Table?

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

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

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

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!

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