我有三张桌子
桌子人
id | name
Run Code Online (Sandbox Code Playgroud)
表文件
id | person_data | person_id
Run Code Online (Sandbox Code Playgroud)
表项目
id | item_name | file_id
Run Code Online (Sandbox Code Playgroud)
每个人都有多个文件,每个文件都有多个项目.有没有办法为每个人选择所有项目只使用mysql返回这样的东西:
person - file_id -> item 1, file_id -> item 2, file_id -> item 3
Run Code Online (Sandbox Code Playgroud)
我正在考虑某种类型的JOIN,我尝试了所有可以想象的组合,但我认为加入它不是解决方案,或者......
使用GROUP_CONCAT.请检查SQLFiddle
SELECT
b.id,b.name,
GROUP_CONCAT(b.items SEPARATOR '|')
FROM (SELECT
p.id,p.name,
CONCAT(f.id,' -> ', GROUP_CONCAT(i.item_name)) AS items
FROM persons p,
files f,
items i
WHERE p.id = f.person_id
AND f.id = i.file_id
GROUP BY f.id) AS b
GROUP BY b.id
Run Code Online (Sandbox Code Playgroud)