我有一个包含父页面和子页面的表,其中首页是parent_id = 0,子页面parent_id是另一页面的id。
ID 1 | parent_id 0
ID 2 | parent_id 0
ID 3 | Parent_id 1
ID 4 | parent_id 1
ID 5 | parent_id 0
所以我有
SELECT *
FROM pages AS parent
WHERE parent.parent_id = 0
SELECT *
FROM pages AS sub
WHERE sub.parent_id != 0
以上单独查询的工作。但我确信有一个可能用一个查询列出所有页面。
我正在尝试获取与此类似的列表,将子页面分组到父页面
Main (Title1)
Main (Title2)
SUB (Title1)
SUB (Tible2)
Main (Title3)
etc
我一直在尝试使用内连接和左连接,但我无法解决这个问题。
我希望有一些有经验的善良的灵魂会帮助我。 :)
由于
答案 0 :(得分:0)
尝试以下查询,它有附加列page_type,表示页面类型。
SELECT page.* , IF(
(SELECT p.parent_id FROM pages p WHERE p.id = page.id) = 0, "PARENT", "CHILD"
) AS PAGE_TYPE
FROM pages AS page
答案 1 :(得分:0)
您可以使用空检查和LEFT JOIN
自身:
SELECT IF(parent.ID IS NULL, 'MAIN', 'SUB') as grouping, page.*, parent.*
FROM pages as page
LEFT JOIN pages as parent
ON page.parent_id = parent.ID