MySQL - Etwas kompliziertere Abfrage über 2 Tabellen
Timon
- datenbank
Hallo,
Ich habe folgendes Problem:
Ich schreibe momentan ein "Karteikartensystem". Dabei geht es darum dass man mit Hilfe virtueller Karteikarten sein Wissen testet. Es gibt 5 Felder in denen die Karten sind. Zu Beginn befinden sich alle Karten im ersten Feld. Wenn man eine Frage richtig beantwortet wandert sie ein Feld weiter, wenn sie falsch beantwortet wird ein Feld zurück.
Nun habe ich 2 Tabellen:
In der ersten Tabelle ("fragen") sind die Fragen.
In der zweiten Tabelle ("user_fra") ist gespeichert wo welche Karte bei welchem Benutzer ist. (Nummer der Frage, Fach, UserID)
Nun ist aber in "user_fra" nur ein Eintrag vorhanden wenn die Frage mindestens in Feld 2 ist.
jetzt ist es leicht die Fragen aus Feld 2,3,4 und 5 auszulesen:
SELECT f.f_id,f.frage,f.antwort
FROM fragen AS f, user_fra AS u
WHERE f.f_id = u.f_id
AND u.feld = [Feldnummer]
AND u.u_id = [UserID]
nun möchte ich aber die Fragen aus Feld 1 auslesen. Da weiss ich aber leider nicht wie ich es machen soll dass ich Abfrage ob ein Eintrag nicht existiert.
Mir schwebte etwas vor wie:
SELECT f.f_id,f.frage,f.antwort
FROM fragen AS f, user_fra AS u
WENN ES KEINEN EINTRAG GIBT
WHERE f.f_id = u.f_id
AND u.u_id = [UserID]
Dass ist natürlich falsch so...
Ich denke dass es hier sicher jemanden gibt der sich besser als ich mit MySQL auskennt und die Frage beantworten kann. Ich habe bisher noch nichts dazu gefunden.
Vielen Dank schonmal.
Timon
Hallo,
Nun ist aber in "user_fra" nur ein Eintrag vorhanden wenn die Frage mindestens in Feld 2 ist.
nun möchte ich aber die Fragen aus Feld 1 auslesen. Da weiss ich aber leider nicht wie ich es machen soll dass ich Abfrage ob ein Eintrag nicht existiert.
Du möchtest also alle Datensätze aus "fragen" für die es noch keinen Eintrag in "user_fra" gibt? Das ist eine Standardaufgabe für einen LEFT JOIN.
SELECT f.f_id,f.frage,f.antwort
FROM fragen AS f LEFT JOIN user_fra AS u ON f.f_id = u.f_id
WHERE u.f_id IS NULL
Allgemein ist es meiner Meinung nach auch beim INNER JOIN günstiger, die JOIN-Syntax einzusetzen statt der WHERE-Umschreibung.
viele Grüße
Axel