2013-08-21 44 views
1

我想加入2個表,事件和event_dates與條件多行,每個事件有許多日期選擇一行MySQL的

事件表包含IDname; event_dates - ID,event_id,date,place_id每天都是event_dates表中的一行。對於不同的日子,place_id可以不同。

我想表明本月的事件列表 - 但只有那些,對於今天place_id = 1

我應該寫什麼SQL查詢是什麼? 感謝

編輯

我很抱歉,我錯過了不便,在與我必須拿出event_dates表中的每個事件的事件一起的結果。

這樣的結果會是怎樣

1) event id and name with its dates for this month (and for today place_id = 1) 
2) other event id and name with its dates for this month (and for today place_id = 1) 
etc 

SELECT e.*, d.date 
FROM events e 
JOIN event_dates d 
ON e.id = d.event_id 
WHERE d.date BETWEEN {d '2013-08-01'} and {d '2013-08-31'} 
AND d.place_id = 1 

此查詢不工作,因爲,如果所有月份的place_id是2,3或其他不便,只爲今天1中的情況下,我將只有只有今天的行活動從event_dates表

結果應以如下這樣

   Aug1  Aug2  Aug3 .... Aug21(today) . . .Aug30 
eventName1  placeId  placeId  placeId  placeId   placeId 
eventName2  placeId  placeId  placeId  placeId    placeId 
eventName3  placeId  placeId  placeId  placeId    placeId 

,我展示這些月份的列表以及他們本月的信息,但是所有列出的事件都應該有今天的placeId = 1。

+1

你嘗試過這麼遠嗎?儘管我可以寫出一個能夠爲你解決這個問題的查詢,但是真的感覺你沒有試過,因爲我會寫的查詢是更基本的INNER JOIN查詢之一。 –

+0

@ Simonatmso.net,道歉,我錯過了提及最重要的條件,沒有說它只是簡單的加入,你是對的 – John

+0

@John:我不明白。你寫過:我想顯示這個月的事件列表 - 但只有那些,今天有place_id = 1。如果我你的月份你有所有不同的地方1,對我來說,你沒有行。請根據您的結果添加一些樣品。 –

回答

0

試試這個:

SELECT e.*, d.date 
FROM events e 
JOIN event_dates d 
ON e.id = d.event_id 
WHERE d.date BETWEEN {d '2013-08-01'} and {d '2013-08-31'} 
AND d.place_id = 1 

但是我有一個疑問。如果您的place_id = 1有更多的日子,您想更多地展示您的活動?

0

嘗試這樣:

SELECT *.events from events 
left join event_date 
on id.events = event_dates.event_id 
where event_dates.dates between '01/08/2013' AND '31/08/2013' 
AND event_dates.place_id = 1; 
+0

INNER JOIN中的LEFT JOIN更加昂貴(您已經模擬了INNER,因爲在WHERE子句中,您已經放置了從表event_dates的條件) –

0

查詢:

SELECT events.id, events.name,event_dates.date,event_dates.place_id 
FROM events 
INNER JOIN event_dates 
ON events.id=event_dates.event_id 
WHERE event_dates.date = sysdate and event_dates.place_id=1;