2014-02-21 198 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