我有一个类似于
的表格结构id | parent | online | name
1 | 1 | 1 | first
2 | 1 | 1 | second
3 | 1 | 1 | third
基本上我想要的是,如果列设置为离线,那么我们不会选择该列, 很容易
Select * from `table` where `online` = 1;
如果父列设置为离线,则下一部分变为离线,我们也不想选择该列。
我的工作是
SELECT t1.* FROM `table` t1 LEFT JOIN `table` t2 ON t1.`parent` = t2.`id`
WHERE t1.`online` = 1 AND t2.`online` = 1;
如果嵌套最多只有一层,那么哪种方法可以正常工作 如果嵌套只有一层深度,有没有更好的方法呢?
另一点是,有没有更好的方法来做到这一点,以便嵌套可以是无限量的深度?
如果存在结构,则需要允许简单(加载方式和代码方式)查询以获取一行中的所有子项,并获取具有相对于子项的嵌套级别的行的所有父项(例如,第一个父项的level为1,parent的父级为2)。
答案 0 :(得分:1)
我可以建议一个答案,第一部分是嵌套是一层深的:
SELECT t1.*
FROM `table` t1
INNER JOIN `table` t2 ON t1.`parent` = t2.`id` AND t2.`online` = 1
WHERE t1.`online` = 1
我相信会更有效率,因为你增加了声明的基数。
不幸的是,多级嵌套是一个棘手的问题,我会在使用CTE的SQL Server上进行,但我在MySQL中对此不了解,抱歉。