MySQL:在一个查询中获取带或不带类别/子类别的日期(并排序)

时间:2010-10-05 17:55:43

标签: python mysql

我有一个包含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。 有没有办法在一个查询中获取所有日期?

提前致谢, 塞巴斯蒂安

2 个答案:

答案 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(子类别),但是按照正确的顺序:

  • 样本日期1,类别为
  • 样本日期2,类别b,子类别b.a
  • 样本日期3,类别b,子类别b.a
  • 样本日期4,类别b,子类别b.b
  • 样本日期6,类别b,子类别b.c
  • 样本日期7,类别c,子句c.a

......等等。

ie。:进入类别,返回没有子类别的任何日期或进入子类别,循环所有这些日期并返回这些子类别中的所有日期。

目前我正在我的python脚本中执行此逻辑,但我认为这应该可以直接使用MySQL。