Fork me on GitHub

Rapport de message :*
 

Re: Recomptage sujets/posts

Titre du sujet : Re: Recomptage sujets/posts
par JJDai sur 22/04/2016 10:46:38

Le mieux est de procéder en deux temps pour chaque table, d’abord faire une sélection pour vérifier qu'il y a bien des enregistrements à supprimer:
Exemple avec la table "bb_posts"
SELECT children.topic_id AS children_topic_idtopics.topic_id AS topics_topic_id
FROM x255_bb_posts children
LEFT JOIN x255_bb_topics topics ON children
.topic_id topics.topic_id
WHERE  topics
.topic_id IS NULL;

Et ensuite si il y a des enregistrement, les supprimer:
DELETE children FROM  x255_bb_posts children
LEFT JOIN x255_bb_topics topics ON children
.topic_id topics.topic_id
WHERE  topics
.topic_id IS NULL;


Le principe, faire une liaison a gauche sur la table à nettoyer avec la table principale. Cela permet de sélectionner tous les enregistrements de la table enfants même si 'il n'y a pas d'enregistrement dans la table principale. Pour les enregistrements manquants le champ de la table principale qui n'existe pas aura pour valeur "Null"; Il suffit d'ajouter une clause "WHERE" en testant le champs de la table principale, si il est nul il faut supprimer l'enregistrement de la table enfant.

Dans les deux requêtes en exemples il suffit de remplacer le nom de la table enfant et le préfixe des tables "x255_" dans mon exemple soit:
1 - remplacer "x255_posts" par "x255_archive" par exemple
2 - remplacer "x255_" par le préfixe utilisé dans la base
Comme j'ai utilisé des alias le reste n'est pas à modifier.


SELECT children.topic_id AS children_topic_id, topics.topic_id AS topics_topic_id
FROM x255_bb_posts children
LEFT JOIN x255_bb_topics topics ON children.topic_id = topics.topic_id
WHERE topics.topic_id IS NULL;

DELETE children FROM x255_bb_posts children
LEFT JOIN x255_bb_topics topics ON children.topic_id = topics.topic_id
WHERE topics.topic_id IS NULL;

JJDai

PS: Précaution d'usage, faire une sauvegarde de la base ou des tables du module, on ne sait jamais,
et peut être relancer un synchro pour finir.


Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

81 Personne(s) en ligne (66 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 81 | Plus ...