在此处查看演示: 缺少的地方:“体育»橄榄球联盟»结果”和其他一些。
问题是由 WHERE 中的最后一个 IF 语句引起的。添加它是为了确保页面/父级只会深入 3 级,当您删除它时,我们最终会得到“足球»结果»冠军”,它不参考顶级。
一切都指向顶部 page_id = 1。
SELECT
p1.page_id,
IF( p1.parent_page_id >1,
( SELECT
IF( p2.parent_page_id >1,
( SELECT
CONCAT( pd3.page_description_name,
' » ',
pd2.page_description_name,
' » ',
pd1.page_description_name )
FROM
pages p3
LEFT JOIN
page_descriptions pd3
ON pd3.page_id = p3.page_id
AND pd3.language_id = '1'
WHERE
p3.page_id = p2.parent_page_id LIMIT 1 ) ,
CONCAT( pd2.page_description_name,
' » ',
pd1.page_description_name ) )
FROM
pages p2
LEFT JOIN
page_descriptions pd2
ON pd2.page_id = p2.page_id
AND pd2.language_id = '1'
WHERE
p2.page_id = p1.parent_page_id LIMIT 1 ), pd1.page_description_name ) AS path
FROM
pages p1
LEFT JOIN
page_descriptions pd1
ON pd1.page_id = p1.page_id
AND pd1.language_id = '1'
WHERE
IF( p1.parent_page_id >1, ( SELECT
IF( p3.parent_page_id IN ( 1,
0 ) ,
1,
0 )
FROM
pages p3
WHERE
p3.page_id = p1.parent_page_id LIMIT 1 ) , 1 )
AND p1.page_id !=1
ORDER BY
path