2017-05-25 10 views
0

私はFacebookのような共有投稿を管理する必要があります、ここで私はそれをやろうとしています。Mysqlが共有投稿のルート親を見つける

IはPARENT_IDフィールドを有する物品を含むテーブルを有し、親が削除されたとき

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 | 
| ...| ...  | ...  | ...  | ... | 
+----------------+---------+------------+--------+ 

実施例に係る(親状態= 0の場合)I 0にすべての共用物品の状態を変更したいです上記の記事の表を参照してください。

ユーザー4共有記事2とユーザー1は、記事2の子である記事3を共有します。記事2(ルート記事)が削除されたとき(状態が0に変更されたとき) & 6)状態も0に変更する必要があります。

これを行うには?

共有ポストを管理するための他の方法は、高く評価

答えて

0

素晴らしいものだ私はあなたが削除にトリガーをプログラムすることができると思う:

ドキュメント:https://dev.mysql.com/doc/refman/5.7/en/create-trigger.html

例があります:

挿入する前に、 ON articles 各行の場合 BEGIN UPDATE記事SET parent_id = 0 WHERE parent.id = O LD.parent_id; END

複数のテーブルにトリガが必要な場合は、すべてのテーブルでクエリをプログラミングする代わりに、ストアドプロシージャをプログラムしてトリガで呼び出すことができます。

また、INNODBテーブルを使用する場合は、レコードの紛失やリンク解除を避けたい場合は、外部キーを使用できます。外部キーを使用すると、存在しないparent_idを挿入することはできません。また、子がある場合は削除できません。

ここでは、外部キーに関するドキュメントを確認できます。https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html

関連する問題