====== Tabellen der Aufgaben-Datenbank ====== === Benutzer === ^Benutzer ^ Typ ^ |__b_benutzername__ | varchar(30) | |b_kennwort | varchar(100) | |b_vollname | varchar(100) | === Aufgaben === ^Aufgaben ^ Typ ^ |__a_id__ | int (11) | |f_kuerzel | varchar(3) | |a_name | varchar(100) | |a_latexcode | text | |j_id | int(11) | |b_benutzername | varchar(?) | |a_creationdate | Datetime | |a_editdate |timestamp | === Jahrgänge === ^Jahrgaenge ^ Typ ^ |__j_id__ | int(11)| |j_name | varchar(10)| |j_sort | int(11)| === Fächer === ^Faecher ^Typ^ |f_name | varchar(20)| |__f_kuerzel__ | varchar(3)| === Themen === ^Themen ^ Typ ^ |__t_id__ | int(11)| |t_name | varchar(50)| |f_kuerzel | varchar(3)| === Aufgaben und Themen === ^A_T ^ Typ ^ |__a_t_id__ | int(11)| |a_id | int(11)| |t_id | int(11)| === Aufgaben und Jahrgänge === ^A_J ^ Typ ^ |__a_j_id__ | int(11)| |a_id | int(11)| |j_id | int(11)| ==== SQL-Abfragen ==== 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