Adresse muss in zwei Gruppen vorhanden sein

mathiu

Erfahrenes Mitglied
Hallo allerseits

Ich habe zwei Tabellen.
tt_contacts
----------------
cid
firstname
lastname
usw.

tt_group2c
---------------
cid
gid


Bis anhin funktionierte meine Gruppensuche ziemlich einfach:
SELECT firstname,lastname FROM tt_contacts
LEFT JOIN tt_group2c USING(cid)
WHERE gid='testgruppe'

Jetzt sollte die Suche aber erweiterbar auf die Bedingung von der Zugehörigkeit in zwei Gruppen sein. Der Kontakt müsste als in Gruppe testgruppe und testgruppe2 sein.

Wir könnte man das lösen, ich steh hier seltsamerweise an.?
 
Zuletzt bearbeitet:
Wenn das hier funktioniert und ich dich richtig verstanden habe, füg doch noch ein AND hinzu:

SELECT firstname,lastname FROM tt_contacts
LEFT JOIN tt_group2c USING(cid)
WHERE gid='testgruppe'
AND gid='testgruppe2'
 
du hast mich zwar richtig verstanden, aber geht leider nicht, er sucht dann im selben Datensatz in tt_group2c nach den beiden gid's und wird so natürlich nie fündig.
 
SELECT c.firstname,c.lastname FROM tt_contacts AS c
LEFT JOIN tt_group2c AS g USING(cid)
WHERE g.gid='testgruppe'
AND c.gid='testgruppe2'

Funktioniert das?

SELECT c.firstname, c.lastname FROM tt_contacts AS c, tt_group2c AS g
WHERE c.gid = 'testgruppe'
AND g.gid = 'testgruppe2'

Eins müsste gehen.
 
Jetzt sollte die Suche aber erweiterbar auf die Bedingung von der Zugehörigkeit in zwei Gruppen sein. Der Kontakt müsste als in Gruppe testgruppe und testgruppe2 sein.
Ich habe zwei Tabellen.
tt_contacts
----------------
cid
firstname
lastname
usw.

tt_group2c
---------------
cid
gid

OK jetzt willst du 1 User haben der in der Testgruppe ist und in der Testgruppe2 AUCH ist. Kann den der user in 2 Gruppen sein?

Warum geht dann das hier nicht:
SELECT firstname,lastname FROM tt_contacts
LEFT JOIN tt_group2c USING(cid)
WHERE gid='testgruppe'
AND gid='testgruppe2'

So sollte es dir doch den Firstname und Lastname von der Tabelle Contacts raussuchen wo die gruppe (gid) Testgruppe ist UND die gruppe gid Testgruppe2 ist.
Du willst ja das es dir nur die User auflistet die in beiden Gruppen sind. Es gibt also User die einer Gruppe testgruppe zugeordnet sind und einer Gruppe testgruppe2 zugeordnet sind hoffentlich auch User die BEIDEN zugeordnet sind. Da müsste doch mein 1. Vorschlag gehen. Ansonsten habe ich dich wirklich falsch verstanden :-)
 
Kann den der user in 2 Gruppen sein?
Ja, sicher..

Die Überlegung von dir ist nicht schlecht und ich kam auch erst darauf, aber es funktioniert nicht, wenn man etwas genauer darüber nachdenkt, wie da genau gesucht wird.

Bei einem LEFT JOIN hängt er die beiden Tabellen nebeneinander, wo die Bedingung in USING stimmt.
Also in etwa so:

a.cid a.firstname a.lastname b.cid b.gid
1 jim jones 1 testgruppe1
1 jim jones 1 testgruppe2
2 jonas hiller 2 testgruppe1
3 jonas hiller 3 testgruppe1
usw.

jetzt sucht er in dieser temporären Tabelle nach =>
b.gid='testgruppe1' AND b.gid='testgruppe2'

verstehst du was ich meine?
und so findet er natürlich nichts.

es scheint mir hier wohl nur eine Lösung über subselects zu geben, die ich eigentlich verhindern wollte..
so geht es:

SELECT firstname,lastname FROM tt_contacts
WHERE
cid IN (SELECT C_ID FROM tt_group2c WHERE gid='testgruppe1')
AND
cid IN (SELECT C_ID FROM tt_group2c WHERE gid='testgruppe2')

scheint mir die einzige Lösung zu sein, das über eine einzelne SQL-Abfrage zu lösen.
 
Axo, da haben wir es wieder KARTESISCHES PRODUKT -> wikipedia

Mir blib auch nichts übrig als es mit Subselect zu machen.
 
Zurück