我有点困惑......
我有物品表:
id | name
1 | item 1
2 | item 2
3 | item 3
4 | item 4
及相关项目表:
id | item_id | related_item_id
2 | 1 | 2
3 | 1 | 4
所以这意味着第1项与第2项和第4项有关。 现在我试图在列表中显示这些内容,其中相关项目始终跟随与其相关的主要项目:
item 1
item 2
item 4
item 3
然后我可以在视觉上显示这些项目2和4与第一项相关并绘制如下内容:
item 1
-- item 2
-- item 4
item 3
说实话,我自己也没有任何想法。我可以查询与任何其他项无关的项,并获取“父项”列表,然后在脚本循环中单独查询关系。这绝不是最性感的解决方案......
答案 0 :(得分:1)
我假设这个问题是关于订购商品列表,没有重复。也就是说,给定项目没有多个父项(我在评论中提出)。
如果是这样,您可以使用left outer join
中的order by
和聪明来执行此操作。
select coalesce(r.related_item_id, i.id) as item_id
from items i left join
related r
on i.id = r.related_item_id
order by coalesce(r.item_id, i.id),
(r.related_item_id is null) desc;
left outer join
标识父项,因为它们不会有任何匹配的行。如果是,coalesce()
会找到它们并使用项ID。
答案 1 :(得分:0)
在我看来,不应在查询中实现此逻辑,而应将其移至实际代码中。 假设item_ids是顺序的,您可以找到最大数量的item_id,然后循环 你可以找到每个item_id的related_item_id,并从中创建一个方便的数据结构。
答案 2 :(得分:0)
此功能属于分层查询类别。在Oracle中,它由connect by子句处理,不确定mysql。但是你可以搜索“层次查询mysql”来得到答案。