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
Cookies helfen bei der Bereitstellung von Inhalten. Durch die Nutzung dieser Seiten erklären Sie sich damit einverstanden, dass Cookies auf Ihrem Rechner gespeichert werden. Weitere Information
Falls nicht anders bezeichnet, ist der Inhalt dieses Wikis unter der folgenden Lizenz veröffentlicht: CC Attribution-Noncommercial-Share Alike 4.0 International