我有一个包含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。 有没有办法在一个查询中获取所有日期?
提前致谢, 塞巴斯蒂安
答案 0 :(得分:0)
好的,最后一击:
如果您想要所有 kapitels,无论他们是否有活动。
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
但我真的不喜欢它在理论上是可能的,研讨会可以有一个Kapital&不相关的Unterkapitel(当然你可以在脚本中防止),我一直认为应该有一个更好的布局,但我唯一能想到的是合并Kapitel&使用简单的Adjancency模型将Unterkapitel分成1个表,让您可以在Seminare的单个“kapitel”字段中自由输入Kapitel或Unterkapitel,完全放弃Unterkapitel字段。
答案 1 :(得分:0)
Wrikken,谢谢!但这并没有返回正确的顺序。
我需要来自所有kapitel(类别)的所有事件(termine),包括他们的unterkapitel(子类别),但是按照正确的顺序:
......等等。
ie。:进入类别,返回没有子类别的任何日期或进入子类别,循环所有这些日期并返回这些子类别中的所有日期。
目前我正在我的python脚本中执行此逻辑,但我认为这应该可以直接使用MySQL。