2017-03-26 2 views
2

Ich habe nach einem guten Tag gesucht, um nach einem Benutzer zu suchen, der in jeder Kategorie UND dem nächsten nicht ODER ist.Benutzer in mehreren Kategorien MySQL

user_id 
------- 
1 
2 
3 
4 

table_user_categories

user_id|category_id 
------------- 
1  |1 
1  |2 
2  |1 
2  |3 

Deshalb möchte ich MySQL fragen, wer ist in der Kategorie 1 und 2 I die IN (1,2) Ansatz, aber dies versucht haben, wie ich es verstehe, ist OR nicht UND gibt mir die Ergebnisse von user_id 1 und 2 nicht nur 1.

Es ist auch ziemlich wichtig für diese erweiterbar wie es sein kann, da es etwa 15 Kategorien sind, so muss ich mehr in die Abfrage hinzufügen Je mehr der Benutzer in meiner Schnittstelle auswählt.

Enorme Entschuldigungen für alles, was ich in meinem Beitrag hier verpasst habe, immer leichter, an diese Dinge zu denken, anstatt zu fragen.

Ich grub nur eine alte Version heraus, was ich versuchte, - war gerade diese gehen, um es zu vergleichen ...

SELECT u.user_id, COUNT(*) AS category_count 
FROM table_user_categories AS u 
WHERE u.category_id IN (1,2) 
GROUP BY u.user_id 
HAVING category_count = 2; 
+0

Ich entdecke einige Unterschiede mit der distinct category_id, also werde ich es ausprobieren und auf Sie zurückkommen. Vielen Dank für Ihre schnelle Antwort. Wenn alles gut ist, werde ich es abstimmen und akzeptieren :-) –

Antwort

2

Wenn Sie alle benutzerkennungen finden wollen, die beide (oder allgemein alle die angegebenen Kategorien), können Sie die Aggregation mit filtern verwenden:

select user_id 
from table_user_categories 
where category_id in (1, 2) 
group by user_id 
having count(distinct category_id) = 2; 

Die having in oben Klausel stellen Sie sicher, dass nur mit beiden category_id 1 und 2 zurückgegeben user_id.

Verwandte Themen