我有一张桌子:
| staff_id | leader_id | team_role | importance |
+ + + + +
| 1001037 | 1000321 | HOD | 1 |
| 1001037 | 1000322 | HOD | 1 |
| 1001037 | 1001037 | Supervisor | 2 |
| 1001094 | 1001037 | Checker | 3 |
| 1001075 | 1001037 | Checker | 3 |
| 1001096 | 1001075 | Squad Leader | 4 |
| 1000393 | 1001094 | Squad Leader | 4 |
| 1000465 | 1001094 | Squad Leader | 4 |
| 1000585 | 1001075 | Squad Leader | 4 |
| 1000664 | 1000585 | Team Member | 5 |
| 1000583 | 1000585 | Team Member | 5 |
| 1000570 | 1000465 | Team Member | 5 |
| 1000316 | 1000465 | Team Member | 5 |
在php中它看起来像这样:
如果我想删除staff_id = 1001075
用户,我需要删除分配给此用户ID的所有内容。因此,1001075
为leader_id
的地方为ids。我能够做到这一点,但我还需要删除用户访问树,以便leader_id= 1001075
为1000585
然后我需要删除leader_id= 1000585
最后,我需要使用staff_id
删除这些用户:
1001075
1001096
1000585
1000664
1000583
我该怎么做?
答案 0 :(得分:1)
有两种方法可以做到这一点:
递归查询所有ID以找出所有子项并逐个删除行。请查看递归查询ID的方法的this答案。
运行ALTER TABLE
脚本并使leader_id
成为外键,引用同一表的staff_id
,并使用ON DELETE CASCADE
定义。通过这种方式,当您删除前导行时,它将删除所有后续行,例如:
ALTER TABLE table
ADD CONSTRAINT fk_leader_id FOREIGN KEY (leader_id) REFERENCES table(staff_id) ON DELETE CASCADE;
我更喜欢第二种方法。