Hallo
eine sehr alte Version. Würde ich mir nicht mehr bieten lassen.
Leider will es mein Arbeitgeber so :-)
"klappt nicht" ist keine Fehlerbeschreibung.
Was, bitte, ist überhaupt Dein Ziel?Ziel: Ich möchte wissen, welche von 20'000 Fragen in einer Tabelle ein User XY schon beantwortet hat.
das wäre ein einfacher Join. Wo ist das Problem?
Darum gibt es zwei Tabellen: Eine mit den Fragen, die andere mit frage_id und user_id. Sind diese gesetzt, hat der User die Frage schon beantwortet. Daher sollten diese nicht mehr ausgelesen werden.
Welches Problem hast Du, dieses zu erreichen?
Grundsätzlich wäre es ganz einfach:
SELECT fragen.frage_id,user.frage_id,user.user_id
FROM fragen,user
WHERE fragen.frage_id != user.frage_id
AND frage.user_id != user.user.idAusgedeutsch: Hole Frage-ID von Fragen-Tabelle und Frage-ID von beantworteten Fragen sowie User-ID von beantworteten Fragen. Wenn Frage-ID und Frage-ID von beiden Tabellen und der User-ID nichts zurückgeben, dann wurde die Frage noch nicht beantwortet.
Nein, genau diesen Unsinn wollte ich nicht haben. Er läßt mich aber vermuten, dass Du im Gegensatz zu Deiner Problembeschreibung genau _die_ Fragen haben möchtest, die ein Benutzer noch _nicht_ beantwortet hat.
Kein Problem, auch nicht mit MySQL 3.23.x. Ein einfacher LEFT JOIN mit einer einfachen WHERE-Klausel:
SELECT -- Gib mir
f.frage_id, -- id der Frage
f.frage -- sowie Text
FROM -- aus
fragen f -- allen Fragen, verknüpft
LEFT JOIN
user_antworten ua -- mit den bisher gegebenen Antworten
ON -- wobei die Verknüpfung über
f.frage_id = ua.frage_id -- die id der Frage erfolgt
AND -- und auf die id
ua.user_id = <id der Person> -- der bestimmten Person geprüft wird,
WHERE -- und zu denen in der Antwortentabelle
ua.frage_id IS NULL -- kein passender Datensatz vorhanden ist.
Dabei ist es wichtig, die Einschränkung der user_id in die Joinbedingung zu nehmen, da die user_id bei nicht beantworteten Fragen ebenfalls NULL liefert. Siehe dazu auch meine Ausführungen in diesem Archivposting.
Freundliche Grüße
Vinzenz