在一个结果行中选择多个行

时间:2012-03-20 14:23:50

标签: mysql

在我的一张桌子中,我存储了我的广告数据,即每个广告一行。 我还将一些日期存储在另一个表中,但是每个日期只有一行,因为我不知道特定广告的日期是多少。 我想在与数据选择相同的查询中选择日期(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"

日期列可以是一个字符串,其中日期用逗号分隔....

有什么想法吗?

2 个答案:

答案 0 :(得分:29)

您可以使用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

答案 1 :(得分:2)

您可以使用GROUP_CONCAT函数

将行转换为列