我在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 “
答案 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将每个访问者减少一行。
也就是说,您的数据结构不应该为此目的使用集合。访问过的地点数量可能超过最大设置大小。此外,连接很难遵循,无法利用索引。