ここでデモを参照してください: 欠落している場所: 「スポーツ » ラグビー リーグ » 結果」およびその他のいくつか。
この問題は、WHERE の最後の IF ステートメントが原因で発生します。これは、ページ/親が 3 レベルの深さだけになるようにするために追加されました。これを削除すると、トップ レベルを参照しない "Football » Results » Championship" になります。
すべてがトップ 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