我有以下表结构,为了方便起见,它也在 sqlfiddle上:
+---------+------------+---------+----------+------ -----+--------------------------------+------------ ------------+--------+--------------+-------------+ ---------------+------------+ | 规则ID | parent_id | left_id | right_id | 规则类型 | 规则标题 | 规则描述 | 公共 | parse_bbcode | 解析链接 | parse_smilies | group_ids | +---------+------------+---------+----------+------ -----+--------------------------------+------------ ------------+--------+--------------+-------------+ ---------------+------------+ | 1 | 0 | 1 | 6 | 猫 | 样品类别 1 | | 1 | 0 | 0 | 0 | 1 2 7 | | 2 | 1 | 2 | 3 | 规则 | 示例规则 1 | 这是一个示例规则描述 | 1 | 1 | 1 | 1 | 1 2 7 | | 3 | 0 | 7 | 8 | 猫 | 样品类别 2 | | 1 | 0 | 0 | 0 | 1 7 2 | | 4 | 0 | 9 | 10 | 猫 | 样品类别 3 | | 1 | 0 | 0 | 0 | 1 7 2 | | 5 | 1 | 4 | 5 | 规则 | 示例规则 3 | 大声笑| 1 | 1 | 1 | 1 | 1 2 7 | +---------+------------+---------+----------+------ -----+--------------------------------+------------ ------------+--------+--------------+-------------+ ---------------+------------+
如您所见,rule_type
可以是'cat'
或'rule'
。
cat
代表类别,类别是根节点:parent_id
总是如此0
。在我的代码中,我们可以通过检查 ifrule_type = 'cat'
或来识别类别parent_id = 0
。
您还可以看到我正在为我的项目使用嵌套集,这就是问题所在。
我已经成功创建了以下功能:
上下移动规则和类别;和
将新规则或类别放在各自位置的末尾。
但是我没有设置规则 right_id
,left_id
如果我们改变它parent_id
!如果我们删除规则或类别,right_id
我也无法设置。left_id
例子
我将尝试用一个例子来解释。请注意,这只是一个示例,而不是实际情况,我需要一个一般性的答案。
从上表中,我们看到我们有 3 个类别rule_id IN (1, 3, 4)
和两个规则rule_id IN (2, 5)
。
带的规则是带rule_id = 2
的类别的一部分,我们可以从列rule_id = 1
中看到。parent_id
如果我更改parent_id
为 4 怎么办?如何设置right_id
&left_id
以使一切都恢复原状?我知道我们需要更新两者rule_id IN (1, 4)
以重新排序所有内容,但我不知道我的查询会是什么样子。
删除也是如此...例如我删除rule_id = 2
(这是一个规则),我将如何以正确的顺序设置right_id
& ?或者当我删除一个类别时?我将如何重新排序类别?left_id
parent_id = 1
我并没有真正尝试在这里做任何事情,因为我不知道如何做这样的事情,因此我寻求你们的帮助,伙计们。
我希望我说清楚了。如果没有,请告诉我,我会尝试更具描述性。