MySQL Anfrage optimieren mit JOIN

Nein, das Fach ist eben nicht jede Stunde dasselbe. Und ich versuche im Moment PHP so viel wie möglich abzunehmen und es in MySQL zu verlagern.
 
Hi,

diese Struktur funktioniert aber nur richtig für Klassen. Zu meiner Zeit gab's in der Oberstufe keine Klassen mehr, man musste sich nach gewissen Regeln zur Abdeckung der Bereiche seinen Stundenplan aus einem Angebot von Kursen selbst zusammenstellen.
Mir sieht das so aus, als sollte einfach_nur_cracks Lösung auch darauf ausgelegt sein. Demnach bräuchte man für die Stunden den Kurs, den Raum (der kann ja montags durchaus ein anderer sein, als mittwochs) und halt die Stunde. Fach und Lehrer gehört für meine Begriffe zum Kurs.

LG
 
Nein, das Fach ist eben nicht jede Stunde dasselbe. Und ich versuche im Moment PHP so viel wie möglich abzunehmen und es in MySQL zu verlagern.

Was ist denn dann bei Dir ein "Kurs"? Ich verstehe darunter z.B. "Grundkurs Mathematik 1". Dazu gibt's dann pro Woche mehrere Stunden. Für genau diese Stunden ist das Fach aber immer "Mathe".
Meine Frage hätte lauten sollen: Warum suchst Du für alle Unterrichtsstunden eines Kurses das Fach.

LG
 
Zu meiner Zeit gab's in der Oberstufe keine Klassen mehr, man musste sich nach gewissen Regeln zur Abdeckung der Bereiche seinen Stundenplan aus einem Angebot von Kursen selbst zusammenstellen.

Ist noch so. Es gibt Grundkurs (GK) und Leistungskurs (LK). GK kann man für alle Eintragen, die die darin LK haben, wissen dann das dort für sie frei ist. Und so Differenzierungen wie Physik / Biologie laufen in den selben Stunden ab, so das man dort "Diff" als Fach einträgt. So steht es oft auch in den Plänen, wenn die direkt von den Planern kommen, bzw. manchmal auch die beiden Fächer genannt.

Stimmt bei meiner Struktur müsste dann noch bei "Stunden" die LehrerID ein Primärschlüssel sein und ab da wird es pervers.
 
Zuletzt bearbeitet:
Ich suche es deshalb so, weil ich Kurse genauso behandle wie Klassen und Klassen bei mir eben auch als Kurse durchgehen, denn die Unterscheidung wird später vorgenommen.

Ich habe jetzt versucht meine Anfrage noch einmal mit Subquerys umzusetzen. Dies ging bis zu einem gewissen Punkt auch, nur jetzt habe ich ein Problem:
Code:
SELECT *
FROM
 (
  SELECT
   `t2`.`id`                   AS `id`,     # ID
   `dat_schedule`.`day`        AS `day`,    # Tag
   `dat_schedule`.`lesson`     AS `lesson`, # Stunde
   `dat_schedule`.`id_teacher` AS `id_t`, 
   `dat_schedule`.`id_subject` AS `id_s`,
   `dat_schedule`.`id_room`    AS `id_r`
  # Kurs, andere Kurse, Raum, Lehrer (kurz), Fach
  FROM `dat_schedule`,
   (
    SELECT `t1`.`id_schedule` AS `id`
    FROM
     (
      # Ermittle alle Unterrichtsstunden des Kurses
      SELECT `rel_schedule_course`.`id_schedule`
      FROM   `rel_schedule_course`
      WHERE  `rel_schedule_course`.`id_course` =
       (
        # Ermittle die ID des Kurses
        SELECT `dat_course`.`id`
        FROM   `dat_course`
        WHERE  `dat_course`.`term` = "12 EN2"
        LIMIT 1
       )
     ) `t1`
   ) `t2`
  WHERE `dat_schedule`.`id` = `t2`.`id`
 ) `t3`
Soweit bin ich erst einmal, nur sollen jetzt Parallel noch drei Anfragen gesendet werden (für id_r, id_s und id_t). Mein Problem ist nun, dass ich auf diese nicht zugreifen kann. Diese Anweisungen würde ich in die äußere FROM-Anweisung einbauen, was aber nicht geht:
Code:
SELECT `dat_room`.`number`
FROM `dat_room`, `t2`
WHERE `dat_room`.`id` = `t3`.`id_r`
LIMIT 1

SELECT `dat_teacher`.`short`
FROM `dat_teacher`
WHERE `dat_teacher`.`id` = `t3`.`id_t`
LIMIT 1

SELECT `dat_subject`.`short`
FROM `dat_subject`
WHERE `dat_subject`.`id` = `t3`.`id_s`
LIMIT 1
 
Zurück