Выберите несколько строк в одной строке результата
В одной из моих таблиц хранятся мои рекламные данные, то есть одна строка за рекламу.
Я также храню несколько дат в другой таблице, но одну строку за день, потому что я не знаю, сколько дат получает конкретное объявление.
Я хочу выбрать 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