SELECT *
FROM A_T at, Aufgaben a, A_J
WHERE (
at.t_id =2
OR at.t_id =5
)
AND a.a_id = at.a_id
AND a.a_id = A_J.a_id
AND at.a_id = A_J.a_id
AND a.a_id
IN (
SELECT aj.a_id
FROM A_J AS aj
WHERE aj.j_id =5
OR aj.j_id =4
)
GROUP BY a.a_id
LIMIT 0 , 30
Welchen Sinn macht „ODER“ in der Aufgaben-Auswahl? Ich würde Themenwahl und Jahrgangswahl eigentlich immer mit UND verknüpfen. Wenn ich dann nur nach Themen suche, steht Jahrgänge auf „alle“.
Beispiel (lang): Suche Optik-Aufgaben für Klassen 8 oder 9:
SELECT * FROM ((((Aufgaben
INNER JOIN A_T ON Aufgaben.a_id = A_T.a_id)
INNER JOIN Themen ON A_T.t_id = Themen.t_id)
INNER JOIN A_J ON Aufgaben.a_id = A_J.a_id)
INNER JOIN Jahrgaenge ON A_J.j_id = Jahrgaenge.j_id)
WHERE
Themen.t_name = 'Optik'
AND
(Jahrgaenge.j_name = '8' OR Jahrgaenge.j_name = '9')
oder kürzer über die IDs:
SELECT * FROM ((Aufgaben
INNER JOIN A_T ON Aufgaben.a_id = A_T.a_id)
INNER JOIN A_J ON Aufgaben.a_id = A_J.a_id)
WHERE
A_T.t_id = 5
AND
(A_J.j_id = 4 OR A_J.j_id = 5)
Zum Anzeigen innerhalb eines Themenblocks ohne Dubletten (hier nur Aufgaben-Name):
SELECT DISTINCT Aufgaben.a_name FROM ((Aufgaben
INNER JOIN A_T ON Aufgaben.a_id = A_T.a_id)
INNER JOIN A_J ON Aufgaben.a_id = A_J.a_id)
WHERE
A_T.t_id = 5
AND
(A_J.j_id = 4 OR A_J.j_id = 5)
Eingebaute Abfrage im Aufgaben-Overview
SELECT DISTINCT at.t_id, at.a_id, a.a_id, a.a_name, t.t_id, t.t_name, a.b_benutzername
FROM (((Aufgaben AS a
INNER JOIN A_T AS at ON a.a_id = at.a_id)
INNER JOIN Themen AS t ON at.t_id = t.t_id)
INNER JOIN A_J AS aj ON a.a_id = aj.a_id)
WHERE at.t_id = 38
AND
(aj.j_id = -1 OR aj.j_id = 1 OR aj.j_id = 2 OR aj.j_id = 3 OR aj.j_id = 4 OR aj.j_id = 5 OR aj.j_id = 6 OR aj.j_id = 7 OR aj.j_id = 8 OR aj.j_id = 9)
ORDER BY a.a_name