从数据库表中删除分配的用户

时间:2017-09-06 08:44:07

标签: php mysql

我有一张桌子:

| 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中它看起来像这样:

enter image description here enter image description here

如果我想删除staff_id = 1001075用户,我需要删除分配给此用户ID的所有内容。因此,1001075leader_id的地方为ids。我能够做到这一点,但我还需要删除用户访问树,以便leader_id= 10010751000585然后我需要删除leader_id= 1000585

的用户

最后,我需要使用staff_id删除这些用户:

1001075
1001096
1000585
1000664
1000583

我该怎么做?

1 个答案:

答案 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;

我更喜欢第二种方法。