У меня есть база данных с 4 таблицами с этой структурой:
У нас есть события, которые могут иметь несколько дат. События подразделяются на категории и подкатегории, но могут иметь только категорию и подкатегорию.
Я попробовал этот запрос:
SELECT
t.id as sortid,
t.numprint,
s.titel,
s.intro,
s.inhalte,
s.zielgruppe,
s.methoden,
s.kapitelprint,
s.unterkapitelprint,
t.ort,
t.bundesland,
t.email,
t.telefon,
t.preis,
t.dateprint
FROM
kapitel k
LEFT JOIN
unterkapitel u
ON u.parent = k.id
LEFT JOIN
seminare s
ON s.kapitel = k.id
AND s.unterkapitel = u.id
AND s.aktiv = 1
LEFT JOIN
termine t
ON t.parent = s.id
Но это не приводит к событиям без подкатегории - все они имеют NONE во всех полях. Есть ли способ получить все даты в одном запросе?
Спасибо заранее, Sebastian
Wrikken, спасибо! Но это не возвращает правильный порядок.
Мне нужны все события (termine) из всех kapitel (категорий), включая их unterkapitel (подкатегории), но в их правильном порядке:
... и т.д.
т.е.: перейдите в категории, верните любые даты без подкатегории или перейдите в подкатегории, запустите все их и верните все даты из этих подкатегорий.
на данный момент я делаю эту логику внутри своего python script, но я думал, что это должно быть возможно с MySQL напрямую.
ORDER BY k.id, u.id IS NULL, u.id
должен ORDER BY k.id, u.id IS NULL, u.id
? Или нужно сначала отсортировать по термину?
ОК, последний снимок:
если вы хотите, чтобы все капители, независимо от того, имеют ли они событие.
SELECT *
FROM kapitel k
LEFT JOIN seminare s
ON s.kapitel = k.id
AND s.aktiv = 1
LEFT JOIN termine t
ON t.parent = s.id
LEFT JOIN unterkapitel u
ON u.parent = k.id
AND s.unterkapitel = u.id
Если вы хотите только события /siminare:
SELECT *
FROM seminare s
JOIN kapitel k
ON s.kapitel = k.id
AND s.aktiv = 1
LEFT JOIN termine t
ON t.parent = s.id
LEFT JOIN unterkapitel u
ON u.parent = k.id
AND s.unterkapitel = u.id
Но мне действительно не нравится, что теоретически возможно, что на семинаре могут быть Капитал и Унтеркапитель, которые не связаны (что можно, конечно, предотвратить в script), я продолжаю думать, что должно быть лучший вариант для этого, но единственное, о чем я могу думать, это слияние Kapitel и Unterkapitel в 1 таблицу с простой моделью Adjancency, которая позволяет вам свободно вводить Kapitel или Unterkapitel в одном поле "kapitel" в Seminare, отбрасывая Unterkapitel поле полностью.