[MySQL] Anzahl der aktiven Umfragen, an denen noch nicht teilgenommen wurde

LasMiranda

kanz pöhse
ID: 28058
L
5 Mai 2006
3.160
340
Ich habe folgenden DB-Aufbau:

  • umfrage_daten
  • id int(11) auto_increment
  • frage text
  • antwort1 text
  • antwort2 text
  • antwort3 text
  • antwort4 text
  • bemerkung mediumtext
  • (start datetime)
  • (end datetime)
  • status tinyint(1)

  • umfrage_teilnehmer
  • userid text
  • umfrage_id int(11)
  • wahl tinyint(1)
  • zeit datetime

Bei der Abstimmung wird in umfrage_id die ID aus umfrage_daten, wahl die Zahl der gewählten Antwort (1-4) gespeichert. Ich möchte jetzt aber rausfinden, an wievielen aktiven (status=1) Umfragen wurde vom User X noch nicht abgestimmt.

Das mit dem start und end der Umfrage wollte ich machen. Da ich diese Abfrage aber noch nicht mal hinbekomme, wollte ich das erstmal nicht beachten.
 
PHP:
select count(id) as anzahl from umfrage_daten where status=1 and id not in (select umfrage_id from umfrage_teilnehmer where userid='".$userid."') and start >= ".$starttime." and end <= ".$endtime."
würde mir jetzt spontan einfallen, aber ist aufgrund der Uhrzeit garantiert falsch :ugly:

das mit dem start/end hab ich auch nicht wirklich verstanden :/
 
Zuletzt bearbeitet:
Leider klappt das bei dem Server nicht mit der Unterabfrage.

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'select umfrage_id from umfrage_teilnehmer where userid='

MySQL-Version 4.0.27
 
Subqueries stinken eh! ;)

Versuch mal das hier:
SELECT b1.id from umfrage_daten b1 left join umfrage_teilnehmer b2 ON b2.umfrage_id=b1.id AND (b2.userid=MEINETOLLEUSERID or b2.userid IS NULL) where b1.status=1 AND b2.userid IS NULL AND (b1.start<NOW() AND b1.ende>NOW())

Ich muss gestehen, ich habe etwas Angst vor dieser Spaghetti-Query, da gehört sicher noch was optimiert. Lass mich wissen ob es geht, ansonsten werf ich nochmal einen Blick im vollends wachen Zustand drauf.

Statt Now solltest Du nach Deinem hoffentlich bald erfolgendem mySQL-Upgrade was statischeres nehmen wegen Query cache.

Achja, würde ggf darüber Nachdenken die Antwortmöglichkeiten in eine eigene Tabelle zu packen.