webForumDet fria alternativet

WHERE IN...

4 svar · 279 visningar · startad av lillebror

lillebrorMedlem sedan apr. 20041 687 inlägg
#1

Hej,

Det var ett tag sen jag var inne i SQL-forumet. Kul att vara tillbaka och få jobba med SQL-koden igen :e

Nu vill jag bara dubbelkolla ett litet kodstycke innan jag börjar använda det.

Jag har programmerat en undersökningsfunktion med en databas i bakgrunden. När en användare har fyllt i undersökningen markeras det i databasen i tabellen tblpollsurvey med memberID och surveyID så att jag ser vilka som har genomfört den.

Nu ska jag skicka ut en påminnelse till de medlemmar som ännu inte har genomfört den.

Så här ser SQL-satsen ut för det:

$sqlSelect = "SELECT firstname, lastname, memberID, username, userpassword, email 
FROM tblmember 
WHERE confirmmembership = 1 AND memberID <> IN(SELECT memberID FROM tblpollsurvey)";

Verkar det stämma?!

LarsGMedlem sedan dec. 200012 465 inlägg
#2
 memberID not IN (SELECT memberID FROM tblpollsurvey)
K@llenMedlem sedan mars 20032 654 inlägg
#3
SELECT firstname, lastname, memberID, username, userpassword, email  
  FROM tblmember m
 WHERE m.confirmmembership = 1 
     AND m.memberID NOT IN  
    (SELECT p.memberID 
        FROM tblpollsurvey p)

Man kan nog använda <>, men jag hade använt not in istället. :)

lillebrorMedlem sedan apr. 20041 687 inlägg
#4

Tack för den snabba responsen!

Jag kört på NOT. Då står det i klartext jämfört med <> :)

lillebrorMedlem sedan apr. 20041 687 inlägg
#5

Jag kom på att jag kommer behöva särskilja på utskicken för mina webbenkäter.

Alt 1 innebär följande:
Ett mail skickas ut till samtliga medlemmar för första gången en enkät genomförs.

SELECT firstname, lastname, memberID, username, userpassword, email FROM tblmember WHERE confirmmembership = 1"

Alt 2 innebär följande:,
En påminnelse skickas ut till samtliga medlemmar som finns lagrade i tabellen tblpollsurveymailedtouser och som inte finns med i tabellen tblpollsurvey

SELECT firstname, lastname, memberID, username, userpassword, email
FROM tblmember m
WHERE m.confirmmembership = 1
AND m.memberID IN(SELECT u.memberID FROM tblpollsurveymailedtouser u)
AND m.memberID NOT IN (SELECT p.memberID FROM tblpollsurvey p)

Alt 3 innebär följande:
En mail skickas ut till medlemmar som har registrerat sig efter det att det första mailet om enkäten skickades ut till existerande medlemmar.

SELECT firstname, lastname, memberID, username, userpassword, email
FROM tblmember m
WHERE m.confirmmembership = 1
AND m.memberID NOT IN(SELECT p.memberID FROM tblpollsurvey p)
AND m.memberID NOT IN(SELECT u.memberID FROM tblpollsurveymailedtouser u)

Att jag valt att göra flera olika alternativ är för att nyatillkomna medlemmar inte ska få ett mail som uppfattas som en påminnelse när den igentligen riktar sig till medlemmar som inte svarat sedan tidigare.

Verkar SQL-satserna stämma för de olika ändamålen?!

Genererad på 382 ms · cache AV · v20260730165559-full.f96bc7eb