Mysql找到共享帖子的根父

时间:2017-05-25 16:38:52

标签: mysql sharing

我必须像Facebook一样管理分享帖这里是我打算如何做的。

我有一个包含带有parent_id字段的文章的表,我想在删除父项时将所有共享文章的状态更改为0(当父状态= 0时)

articles

+----+-----------+--------------+-------+--------+
| id | content   | user_id | parent_id  | state  |
+----+-----------+--------------+-------+--------+
| 1  | content   | 2       | null       |   1    | 
| 2  | content   | 5       | null       |   1    |
| 3  | content   | 4       | 2          |   1    |
| 4  | content   | 6       | null       |   1    |
| 5  | content   | 7       | 1          |   1    |
| 6  | content   | 1       | 3          |   1    |
| ...| ...       | ...     | ...        |   ...  |
+----------------+---------+------------+--------+

根据上面的文章表示例:

用户4分享第2条,用户1分享第3条,这是第2条的子女。因此,当第2条(根文章)被删除(他的状态变为0)时,所有儿童文章(3& 6)都表明必须也改为0。

如何做到这一点?

管理分享帖子的任何其他方式都将非常感谢

1 个答案:

答案 0 :(得分:0)

我认为您可以在删除时编写触发器:

文档:https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html

有一个例子:

在插入articles之前 对于每一行 开始     UPDATE文章SET parent_id = 0 WHERE parent.id = OLD.parent_id; END

如果您需要多个表上的触发器,您可以编写存储过程并在触发器上调用它,而不是在每个表上编写查询。

此外,如果您想避免丢失/取消链接的记录,如果您使用INNODB表,则可以使用外键。使用外键,您不能插入不存在的parent_id,或者如果有任何子项,则无法删除寄存器。

您可以在此处查看有关外键的文档:https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html