2016-04-16 15 views
0

私は2つのテーブルを「1対多数」の関係にしています。別名SELECTとして別名を選択します

だからテーブルpersonに私は、ID、名前、などがあり、表Iは、IDを持っているtagsに、タグ

をPERSONIDそして一人が、異なるタグとNエントリを持つことができます。

私は

SELECT id, name, 
    (SELECT * FROM tags WHERE personid = id) AS tags 
    FROM person 

ような何かを考えていたと私は番号(ID)STRING(名)ARRAY(タグ)で結果の行を受け取ることを期待しています。 私は2つの別々のクエリでforループを使ってこれを行う方法を知っていますが、MySQLはこれを行うのが最善であると思います。

私がたくさんの行で終わると、私は得た各行の配列のようなエントリにすべてのタグをグループ化したいと思います。一人一列

これは可能ですか?

答えて

1

あなたは

http://dev.mysql.com/doc/refman/5.7/en/group-by-functions.html#function_group-concat

IDでGROUPとGROUP_CONCATを使用することができ、このような何か:

SELECT person.id, person.name, 
    GROUP_CONCAT(tags.name SEPARATOR ', ') FROM person 
    INNER JOIN tags ON tags.personid = person.id 
    GROUP BY person.id 
+2

あなたはタグとして 'GROUP_CONCAT(...)のようなタグフィールドのエイリアスを使用する必要があります'。それ以外の場合、アプリケーション側でそのフィールドにアクセスすることは困難です。 –

関連する問題