我有三个表:项目,列表,项目。
项目加入project_id
上的列表,项目加入list_id
上的列表,目标是获取每个列的所有行数据。
我尝试了什么? 好吧,我实际上只能通过三个单独的查询/输出来完成它,然后用PHP迭代它们来组合数据。
是否可以编写查询,以便最终得到一个我可以轻松迭代的数据对象?
project (w details)
-- list (and its details)
----- item (w details)
----- item (w details)
----- item (w details)
-- list (w details)
----- item (w details)
----- item (w details)
答案 0 :(得分:5)
你的意思是这样的:
select
a.project_id,
b.list_id,
c.item_id
from
projects a
join lists b
on a.project_id=b.project_id
join items c
on b.list_id=c.list_id
输出类似于:
project_id | list_id | item_id
1 | 5 | 45
1 | 5 | 46
1 | 8 | 12
或者你想将它的所有部分归还一行吗?
如果您想要一行,您可以按照以下方式执行操作:
select
a.project_id,
group_concat(b.list_id) as listIDs,
group_concat(c.item_id) as itemIDs
from
projects a
join lists b
on a.project_id=b.project_id
join items c
on b.list_id=c.list_id
但是在PHP中处理所有分组的东西会变得更加混乱。
输出类似于:
project_id | list_id | item_id
1 | 5,8 | 45, 46, 12
你也可以将两者混合搭配,以获得两全其美的效果:
select
a.project_id,
b.list_id as listIDs,
group_concat(c.item_id) as itemIDs
from
projects a
join lists b
on a.project_id=b.project_id
join items c
on b.list_id=c.list_id
输出类似于:
project_id | list_id | item_id
1 | 5 | 45, 46
1 | 8 | 12
答案 1 :(得分:1)
试试这个:如果你想显示投射方式
select
a.project_id,
b.list_id,
c.item_id
from
projects a
left join lists b on a.project_id=b.project_id
left join items c on b.list_id=c.list_id
order by b,c