使用GROUP_CONCAT检索所有行数据

时间:2012-09-09 19:27:13

标签: mysql select field group-concat

我在mysql中使用GROUP_CONCAT()从存储的ID列表中检索数据,如下所示:

**Table : Visitor**
ID   |  name  |  id_visited_place
--------------------------
1    |  tom   |  222,235,455


**Table : Places**
ID   |  Country  |  City     | Date
--------------------------------------
222  |  France   |  Paris    | 2010-08-11
235  |  Belgium  |  Antwerp  | 2009-04-24
455  |  Germany  |  Berlin   | 2009-03-17

问题是此查询只返回一个字段:

SELECT visitor.*, GROUP_CONCAT(places.country) AS country FROM visitor
LEFT JOIN Places ON FIND_IN_SET(places.id, visitor.id_visited_place)
GROUP BY visitor.id

但是对于id_visited_place中的每个ID,我想返回与此ID相关联的每个字段,例如:“我在法国 2010年访问了巴黎 08-11

1 个答案:

答案 0 :(得分:1)

然后通过以下方式离开小组:

SELECT concat('I visited ', p.city, ', ', p.country, ' on ', date)
FROM visitor v left outer join
      Places p
      ON FIND_IN_SET(p.id, v.id_visited_place)
GROUP BY v.id

您的联接将行相乘以为每个位置获取单独的行。然后,group by将每个访问者减少一行。

也就是说,您的数据结构不应该为此目的使用集合。访问过的地点数量可能超过最大设置大小。此外,连接很难遵循,无法利用索引。