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

問題は、このクエリが 1 つのフィールドのみを返すことです。

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フランスパリを訪れました」

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 は、訪問者ごとに 1 行に減らします。

とはいえ、データ構造でこの目的のためにセットを使用するべきではありません。訪問した場所の数が、設定された最大サイズを超える可能性があります。また、結合を追跡するのはかなり難しく、インデックスを利用できません。

于 2012-09-09T20:13:44.837 に答える