Ik heb een tabel met email adressen (members). En een tabel met groepen. Email adressen worden aan een groep gekoppeld met een tussentabel:
[members]:id,email,name
[groepen]:id,groupname
[groupmembers]:memberid,groupid
Het is vrij simpel om met 1 query alle email adressen te tonen die in een groep zitten:
SELECT email FROM members,groupmembers WHERE members.id=groupmembers.emailid AND groupmembers.groupid=$id
Maar nu wil ik 1 query hebben die alle email adressen laat zien die niet in een groep zitten.
Ik kwam zelf niet verder dan een
SELECT id,email FROM members
en die dan regel voor regel nalopen met de volgende query:
SELECT memberid FROM groupmembers WHERE memberid=$id ($id is dan de id van de vorige query).
Als aantal gevonden regels=0 dan is het adres dus niet in een groep. Het werkt. Maar met een bestand van 3000 email adressen is deze manier zo traag als dikke stront omdat die query 3000x wordt uitgevoerd.
Is een dergelijke query niet gewoon in één (snelle) query te proppen?
[members]:id,email,name
[groepen]:id,groupname
[groupmembers]:memberid,groupid
Het is vrij simpel om met 1 query alle email adressen te tonen die in een groep zitten:
SELECT email FROM members,groupmembers WHERE members.id=groupmembers.emailid AND groupmembers.groupid=$id
Maar nu wil ik 1 query hebben die alle email adressen laat zien die niet in een groep zitten.
Ik kwam zelf niet verder dan een
SELECT id,email FROM members
en die dan regel voor regel nalopen met de volgende query:
SELECT memberid FROM groupmembers WHERE memberid=$id ($id is dan de id van de vorige query).
Als aantal gevonden regels=0 dan is het adres dus niet in een groep. Het werkt. Maar met een bestand van 3000 email adressen is deze manier zo traag als dikke stront omdat die query 3000x wordt uitgevoerd.
Is een dergelijke query niet gewoon in één (snelle) query te proppen?
[ Voor 10% gewijzigd door amphora op 24-07-2007 14:56 ]
nickdekruijk.nl Websites & Fotografie