1

我有三张桌子

餐桌人

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,我尝试了所有我能想象到的组合,但我认为加入它不是一个解决方案,或者......

4

2 回答 2

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
于 2013-05-21T19:51:11.323 回答
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

于 2013-05-21T19:51:01.757 回答