2014-02-21 43 views
1

我有一个表events,event_dateevent_category。我有两个使用event_to_dateevent_to_category的多对多关系。多对多关系SQL查询

我想建立一个类别的事件页面,按日期分组。我可以按日期或类别拉事件,但我不知道如何按日期分组。

的我想要什么,对于一个给定类别的一个例子:

21 Feb 
Event 1 
Event 2 

22 Feb 
Event 2 
Event 3 

得到事件的caetgory的代码是:

SELECT * from event e 
INNER JOIN event_to_category etc ON etc.event_id = e.id 
WHERE etc.category_id = 53 

编辑:表架构如下

events: id, title, name, desc, archived, body 
event_date: id, name 
event_category: id, title, desc, active 

event_to_date: id, event_id, event_date_id 
event_to_category: id, event_id, event_category_id 
+1

你可以给我们表格的模式吗? –

+0

没有表模式不可能对你有所帮助 – Fabio

+0

你能告诉我们哪些列相互引用(否则只是在连接条件下猜测)?活动日期还有哪些字段? event_date_id是日期字段吗?换句话说,'2月21日'和'2月22日'是哪个表的哪个字段? –

回答

1

尝试:

select ed.name, e.title 
    from event e 
    join event_to_category etc 
    on etc.event_id = e.id 
    join event_category ec 
    on etc.event_category_id = ec.id 
    join event_to_date etd 
    on e.id = etd.event_id 
    join event_date ed 
    on etd.event_date_id = ed.id 
where etc.category_id = 53 
order by ed.name 

我做了几个假设哪个列涉及到彼此。我还假定在“event_date”表上称为“名称”的字段是令人感兴趣的。

+0

我认为你已经做出了关于哪些列相互引用的正确假设,但是这个查询返回所有事件,而不是id = 53类别中的那些事件? – Richard

+0

@Richard我想我缺少event_category表(及其连接)。请重试编辑sql –

+0

干杯,这工作完美,现在有道理! – Richard

0

我想你只需要加入其他两个表和GROUP BY的日期,据我了解,乌尔德是nameevent_date

SELECT * from event e 
INNER JOIN event_to_category etc 
ON etc.event_id = e.id 
INNER JOIN event_to_date etd 
ON e.id = etd.event_id 
INNER JOIN event_date ed 
ON etd.event_date_id = ed.id 
WHERE etc.category_id = 53 
GROUP BY ed.name