3

私は3つのテーブルを持っています:

categories:
ID, category
"1","Cars"
"2","Trucks"
"3","Bikes"
"4","Planes"
"5","Boats"

users:
ID, username
"1","john"
"2","bob"
"3","billy"

users_categories:
ID, userid, categoryid
"1","1","2"
"2","1","5"
"3","2","3"
"4","3","2"
"5","3","4"
"6","3","5"

Q1。私が欲しいのは:

john,Trucks,Boats
bob,Bikes
billy,Trucks,Planes,Boats

私はこれに来ました。カテゴリのコンキャットで十分です。

SELECT U.`username`, (SELECT C.`category` FROM `categories` C LEFT JOIN `users_categories` UC ON C.`ID` = UC.`categoryid` WHERE U.ID = UC.userid) FROM  `users` U

しかし、私は#1242を取得します-サブクエリは複数の行を返します。

Q2。これを構造化するためのより良い方法はありますか?50〜100を超えるカテゴリはありません。

4

2 に答える 2

4

GROUP_CONCATあなたが望むものを達成するために使用します

SELECT  a.username,
        GROUP_CONCAT(c.category)
FROM    users a
        INNER JOIN users_categories b
            On a.Id = b.userID
        INNER JOIN categories c
            ON b.categoryID = c.ID
GROUP BY a.ID
于 2012-11-09T06:52:52.220 に答える
0

カテゴリをコンマ区切りの文字列として使用できる場合は、GROUP_CONCAT 関数を使用できます。

見てみましょう(mysqlで試したことはありません)

select u.username,
       GROUP_CONCAT(DISTINCT c.Category order by c.Category SEPARATOR ',')
from users u
     join usersCategories uc 
       on u.ID = uc.userID
     join Categories c 
       on c.ID = uc.CategoryID

申し訳ありませんが、MySQL 固有の構文に合わせて調整する必要があるかもしれません。

于 2012-11-09T06:56:26.327 に答える