Was ich brauche, scheint irgendwie kompliziert, aber dann bin ich nicht so gut in SQL. Im Grunde habe ich eine Tabelle, die Konversationsteilnehmer speichert. Ich brauche eine Abfrage, die unter Verwendung von zwei bereitgestellten Benutzer-IDs bestimmt, ob eine Konversation existiert, die NUR die zwei angegebenen Benutzer enthält. Gespräche, die über diese beiden hinaus zusätzliche Benutzer enthalten, sollten nicht gezählt werden - nur eine einzige 1-zu-1-Konversation zwischen den beiden angegebenen Benutzern.SQL: Wählen Sie genau zwei Zeilen mit einer übereinstimmenden ID basierend auf zwei gegebenen Werten
Hier ist meine SQLfiddle: http://sqlfiddle.com/#!9/284e1/33/0
Und Abfrage meine in-progress, die nicht den Trick tut:
SELECT * FROM mybb_conversation_participants WHERE conversation_id IN ( SELECT conversation_id FROM mybb_conversation_participants WHERE (user_id = 6 OR user_id = 11) GROUP BY conversation_id HAVING COUNT(*) = 2 );
Ich glaube nicht, daß ich das Verständnis der HAVING COUNT(*) = 2
Teil, weil diese Abfrage alle Konversationen zurückgibt, die die zwei Benutzer enthalten, auch wenn andere Benutzer in dieser Konversation ebenfalls vorhanden sind. Wiederum sollten nur 1-zu-1-Konversationen zwischen den beiden bereitgestellten Benutzern ausgewählt werden, andernfalls sollte die Abfrage nichts auswählen. In der obigen SQLFiddle sollten beispielsweise nur Zeilen mit einer conversation_id
von 12
oder 19
zurückgegeben werden, da alle anderen Übereinstimmungen mehr als zwei Zeilen enthalten.
Das war, was ich die HAVING
Anweisung hoffen wollte, aber anscheinend nicht.
Irgendwelche Ideen?
Sorry, bemerkte ich, bevor ich Ihre Bearbeitungen sah. Das ist perfekt, vielen Dank für die schnelle Antwort! –