我在使用mysql的多级页面查询时遇到了问题。
我的桌子结构是这样的。表名为“default_pages”
id title parent_id
18 About Us 0
19 ab 1 18
20 contact 0
21 ab 2 18
22 sub 1 21
23 sub 2 22我的疑问是
SELECT p.id AS id, p.title AS ptitle, parent.id AS parent, grandparent.id AS grandparent
FROM default_pages AS p
LEFT JOIN default_pages AS parent ON p.parent_id = parent.id
LEFT JOIN default_pages AS grandparent ON parent.parent_id = grandparent.id
where p.parent_id = 18但是我得到了下面的输出
id ptitle parent grandparent
19 ab 1 18 null
21 ab 2 18 null期望的输出应该是
id ptitle parent grandparent
19 ab 1 18 null
21 ab 2 18 null
22 sub 1 21 18
23 sub 2 22 21发布于 2014-09-28 12:50:28
不幸的是,MySQL不直接支持分层查询或递归查询,因此您必须使用固定数量的多个联接(或使用存储过程)来处理这个问题。我认为您需要在所有父in中检查18:
SELECT p.id AS id, p.title AS ptitle, parent.id AS parent, grandparent.id AS grandparent
FROM default_pages p LEFT JOIN
default_pages parent
ON p.parent_id = parent.id LEFT JOIN
default_pages grandparent
ON parent.parent_id = grandparent.id
WHERE 18 in (p.parent_id, parent.parent_id, grandparent.parent_id);发布于 2014-09-28 12:48:06
where子句中存在错误,它将结果限制在parent_id = 18的所有行。相反,您似乎需要所有具有父行的行。这应该是可行的:
SELECT p.id AS id, p.title AS ptitle, parent.id AS parent, grandparent.id AS grandparent
FROM default_pages AS p
LEFT JOIN default_pages AS parent ON p.parent_id = parent.id
LEFT JOIN default_pages AS grandparent ON parent.parent_id = grandparent.id
where p.parent_id != 0https://stackoverflow.com/questions/26084930
复制相似问题