2013-08-21 4 views
1

Я пытаюсь соединить 2 таблицы, событие и event_dates, каждое событие имеет много датвыбрать несколько строк с условием для одной строки MySQL

события таблицы содержит ID, name; 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

@ Джон: Я не понимаю. Вы написали: я хочу показать список событий за этот месяц, но только те, что на сегодняшний день имеют place_id = 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

LEFT JOIN дороже INNER 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; 
Смежные вопросы