所以我正在开发一个网站,允许用户创建项目A.K.A“指南”,然后为该创建的项目添加步骤。
例如我的步骤表结构:
------------------------------------
| id | projectid | stepOrder |
| 1 | 103 | 1 |
| 2 | 103 | 2 |
| 3 | 103 | 3 |
| 4 | 103 | 4 |
| 5 | 104 | 1 |
| 6 | 104 | 2 |
| 7 | 104 | 3 |
-----------------------------------
因此,您可以看到此表有3个字段:id,projectID(在另一个表中引用项目ID)和stepOrder。现在,如果用户决定从103项目中删除第2步,我们将留下这样的内容:
------------------------------------
| id | projectid | stepOrder |
| 1 | 103 | 1 |
| 3 | 103 | 3 |
| 4 | 103 | 4 |
| 5 | 104 | 1 |
| 6 | 104 | 2 |
| 7 | 104 | 3 |
-----------------------------------
正如您所看到的,因为我们删除了第2步,现在它从第1步直接跳到第3步。但我需要它是这样的:
------------------------------------
| id | projectid | stepOrder |
| 1 | 103 | 1 |
| 3 | 103 | 2 |
| 4 | 103 | 3 |
| 5 | 104 | 1 |
| 6 | 104 | 2 |
| 7 | 104 | 3 |
-----------------------------------
那我怎么能实现这个目标呢?
答案 0 :(得分:1)
通常这是作为后续更新在应用程序端完成的:
DELETE FROM guide_steps WHERE id=?
UPDATE guide_steps SET stepOrder=stepOrder-1 WHERE stepOrder>? AND projectid=?
您可以将其锁定在一个事务中,以避免在没有另一个步骤的情况下完成一步。
也可以将它包装在一个触发器中,但这通常是一个坏主意,因为维护它们可能很复杂,并且很容易“触发快乐”。