2017-05-25 2 views
0

Je dois gérer le partage de poste comme sur Facebook voici comment j'ai l'intention de le faire.Mysql trouver le parent racine du post partagé

I ont une table qui contient des articles avec un champ parent_id et je voudrais changer l'état de tous les articles partagés à 0 lorsque parent est supprimé (lorsque l'état parent = 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 | 
| ...| ...  | ...  | ...  | ... | 
+----------------+---------+------------+--------+ 

Exemple selon l' tableau des articles ci-dessus:

L'utilisateur 4 partage l'article 2 et l'utilisateur 1 partage l'article 3 qui est un enfant de l'article 2. Ainsi, lorsque l'article 2 (article racine) est supprimé (son état passe à 0) tous les articles enfants (3 & 6) l'état doit également changer à 0.

Comment accomplir ceci?

Toute autre façon de gérer après le partage sera très apprécié

Répondre

0

Je pense que vous pouvez programmer un déclencheur sur suppression:

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

Il y a un exemple:

AVANT INSERT ON articles POUR CHAQUE RANG BEGIN METTRE À JOUR les articles SET parent_id = 0 O WH parent.id = O LD.parent_id; END

Si vous avez besoin du déclencheur sur plusieurs tables, vous pouvez programmer une procédure stockée et l'appeler sur le déclencheur au lieu de programmer la requête sur chaque table. De plus, si vous voulez éviter d'avoir des enregistrements perdus/non liés, vous pouvez avoir une clé étrangère si vous utilisez des tables INNODB. Avec une clé étrangère, vous ne pouvez pas insérer un parent_id qui n'existe pas, ou vous ne pouvez pas supprimer un registre s'ils ont des enfants.

Vous pouvez consulter la documentation sur les clés étrangères ici: https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html