Abfrageproblem
am 30.10.2006 11:56:38 von Stephan Dreisbach
Hallo,
ich habe ein Problem mit einer mysql-Abfrage:
In Tabelle Schueler gibt es (SchuelerID, Name usw).
In Tabelle Aufgaben (Nr, Aufgabentext, Loesung) stehen viele kleine
Matheaufgaben.
In Tabelle Klassenarbeit (Aufgabe, Lehrer) findet sich eine Liste
ausgesuchter Aufgaben. Klassenarbeit.Aufgabe und Aufgaben.Nr sind
identisch.
Wenn jetzt eine der Aufgaben der Klassenarbeit gelöst wurde (per
Zufall), wird die Aufgabennr und die SchülerID in Tabelle
Kl_Ergebnisse (also erledigt) geschrieben. Wird jetzt eine neue
Aufgabe gestellt, darf eine bereits gelöste (steht ja in
Kl_Ergebnisse) nicht mehr angeboten werden.
Ich habe folgendes probiert:
$frage = "SELECT * FROM Klassenarbeit,Aufgaben where
Klassenarbeit.Aufgabe = Aufgaben.Nr and Klassenarbeit.Lehrer='$LNr'
order by rand() limit 1";
Das berücksichtigt allerdings nicht, ob die Aufgabe schonmal gerechnet
wurde.
$frage = "SELECT * FROM Klassenarbeit,Aufgaben,Kl_Ergebnisse where
Klassenarbeit.Aufgabe = Aufgaben.Nr and Klassenarbeit.Lehrer='$LNr'
order by rand() limit 1";
Das bringt schon kein Ergebnis mehr.
Hat jemand für mich eine funktionierende Abfrage?
Danke
Stephan
Re: Abfrageproblem
am 03.11.2006 23:25:22 von Christian Wagner
Hallo
> $frage = "SELECT * FROM Klassenarbeit,Aufgaben where
> Klassenarbeit.Aufgabe = Aufgaben.Nr and Klassenarbeit.Lehrer='$LNr'
> order by rand() limit 1";
> Das berücksichtigt allerdings nicht, ob die Aufgabe schonmal gerechnet
> wurde.
Ist Klar, die Tabelle Kl_Ergebnis wird nicht mit einbezogen
> $frage = "SELECT * FROM Klassenarbeit,Aufgaben,Kl_Ergebnisse where
> Klassenarbeit.Aufgabe = Aufgaben.Nr and Klassenarbeit.Lehrer='$LNr'
> order by rand() limit 1";
> Das bringt schon kein Ergebnis mehr.
Die Tabelle Kl_Ergebnis ist hier drin, aber es ist keine Relation erstellt
worden.
> Hat jemand für mich eine funktionierende Abfrage?
Verusch mal folgende Abfrage
SELECT a.Nr, a.Text FROM Aufgaben a
INNER JOIN Klassenarbeiten b ON a.Nr = b.Aufgabe
INNER JOIN Kl_Ergebnis c ON a.Nr = c.AufgabeId
WHERE b.Lehrer = '$LNr' AND c.AufgabeId IS NULL
Ich habe die Spalte AufgabeID in der Tabelle Kl_Ergebnis für die Nummer
vorgesehen, da dieser Name von dir nicht angegebn wurde.
Diese Abfrage _sollte_ funktionieren. Habe sie allerdings nicht getestet.
Ich empfehle Dir einen Blick ins Manual zu werfen unter dem Stichwort 'Join
/ Outer Join'
Gruß Christian
Re: Abfrageproblem
am 03.11.2006 23:27:19 von Christian Wagner
Ich habe einen Fehler in meiner Abfrage gefunden
> Verusch mal folgende Abfrage
>
> SELECT a.Nr, a.Text FROM Aufgaben a
> INNER JOIN Klassenarbeiten b ON a.Nr = b.Aufgabe
> INNER JOIN Kl_Ergebnis c ON a.Nr = c.AufgabeId
> WHERE b.Lehrer = '$LNr' AND c.AufgabeId IS NULL
Muss heißen
SELECT a.Nr, a.Text FROM Aufgaben a
INNER JOIN Klassenarbeiten b ON a.Nr = b.Aufgabe
LEFT OUTER JOIN Kl_Ergebnis c ON a.Nr = c.AufgabeId
WHERE b.Lehrer = '$LNr' AND c.AufgabeId IS NULL