ID de sélection MySQL apparaissant sur différentes lignes avec plusieurs valeurs de colonne spécifiques
Problème :
La sélection d'éléments dans une table associative en fonction de plusieurs valeurs spécifiées pour une colonne particulière est une tâche courante mais difficile. Par 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 |
L'objectif est de sélectionner uniquement les éléments qui appartiennent aux deux ou à toutes les catégories spécifiées ; par exemple, si les ID de catégorie 201 et 202 sont fournis, seuls les éléments 1 et 2 doivent être renvoyés.
Solutions :
1. Auto-jointure :
Cette méthode consiste à joindre la table avec elle-même sur la colonne item_id :
<code class="sql">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 IN (201, 202)</code>
Cette requête renvoie un ensemble de résultats joint avec une ligne pour chaque paire unique de lignes de la table d'origine qui satisfont aux critèrescategory_id.
2. Group BY et HAVING :
Une approche alternative consiste à utiliser les clauses GROUP BY et HAVING :
<code class="sql">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</code>
Cette requête regroupe les lignes par item_id et compte les occurrences des ID de catégorie 201 et 202 pour chaque ligne. La clause HAVING filtre les lignes qui n'ont pas le nombre d'occurrences spécifié (dans ce cas, 2).
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!