我有三张桌子
表人id | name
表格文件
id | person_data | person_id
表项目
id | item_name | file_id
每个人都有多个文件,每个文件都有多个项目。 有没有办法为每个人选择所有项目只使用mysql返回这样的东西:
person - file_id -> item 1, file_id -> item 2, file_id -> item 3
我正在考虑某种类型的JOIN,我尝试了所有可以想象的组合,但我认为加入它不是解决方案,或者......
答案 0 :(得分:5)
使用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
答案 1 :(得分:3)
SELECT ti.id, ti.item_name
FROM TableItems ti
INNER JOIN TableFiles tf ON tf.id = ti.file_id
INNER JOIN TablePersons tp ON tp.id = tf.person_id
WHERE tp.id = :id
:id
是您要为其列出项目的人的id
。