0

我在 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 年 8 月 11 日访问了法国巴黎

4

1 回答 1

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 将其减少回每位访客一行。

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

于 2012-09-09T20:13:44.837 回答