Выберите несколько строк в одной строке результата

В одной из моих таблиц хранятся мои рекламные данные, то есть одна строка за рекламу. Я также храню несколько дат в другой таблице, но одну строку за день, потому что я не знаю, сколько дат получает конкретное объявление. Я хочу выбрать al даты (где ID adventisement = 1) в том же запросе, что и выбор данных, разделенный bij a komma. Проблема только в том, что я получаю столько строк, сколько есть дат, я хочу только одну строку с данными.....

Table 1 (Advertisements)
ID_adv         data 1             data2
1              name1              picture1
2              name2              picture2  
3              name3              picture3
4              name4              picture4

Table 2 (Dates)
ID  ID_adv      date
1     2     1-1-2012
2     2     2-1-2012
3     3     1-1-2012
4     3     2-1-2012
5     3     3-1-2012
6     3     4-1-2012

Итоговый запрос (Select ID_adv, data1, data2, dates WHERE ID_adv = 3)

3,name3,picture3,"1-1-2012,2-1-2012,3-1-2012,4-1-2012"

Столбец дат может быть одной строкой с датами, разделенными запятой....

Любые идеи?

Ответы

Ответ 1

Вы можете использовать GROUP_CONCAT() и GROUP BY для получения желаемых результатов:

SELECT t1.*, GROUP_CONCAT(t2.date) AS dates
FROM Table1 t1
LEFT JOIN Table2 t2
  ON t2.ID_adv = t1.ID_adv
GROUP BY t1.ID_adv

Это возвращает все даты для каждой рекламы, объединенные запятыми. Если в таблице 2 нет дат для конкретной рекламы, вы получите NULL для столбца дат.

Чтобы настроить таргетинг на конкретное объявление, просто добавьте предложение WHERE:

SELECT t1.*, GROUP_CONCAT(t2.date) AS dates
FROM Table1 t1
LEFT JOIN Table2 t2
  ON t2.ID_adv = t1.ID_adv
WHERE t1.ID_adv = 3
GROUP BY t1.ID_adv

Ответ 2

Вы можете превратить строки в столбец с функцией GROUP_CONCAT