1 votes

Colonne de recomptage mysql basée sur les lignes de la table secondaire

J'ai repris une base de données avec deux tables, nommons-les entries y comments . Les entries contient une colonne nommée comment_count qui contient le nombre de lignes avec l'identifiant de l'entrée en comments correspondant à cette ligne dans entries .

Dernièrement, cette connexion s'est terriblement désynchronisée en raison des changements de version de la base de code. J'ai besoin d'aide pour construire une requête à exécuter dans phpmyadmin pour synchroniser ces chiffres à nouveau. La quantité de lignes dans entries est d'environ 8000 et les lignes de comments est d'environ 80000, il ne devrait donc pas y avoir de problème pour exécuter la requête de synchronisation.

Structure :

  • entries les comptoirs :
  • id comment_count | etc.
  • comments contient
  • id blogentry_id | etc.

La seule solution à laquelle je pense est de boucler chaque entrée dans le fichier entries avec php et mettre à jour individuellement, mais cela semble extrêmement fragile par rapport à une solution SQL pure.

Je vous remercie de votre aide !

3voto

Quassnoi Points 191041
INSERT
INTO    entries (id, comment_count)
SELECT  blogentry_id, COUNT(*) AS cnt
FROM    comments
GROUP BY
        blogentry_id
ON DUPLICATE KEY
UPDATE  comment_count = cnt

1voto

jnt30 Points 878

Je pense qu'une solution SQL pure consisterait à utiliser une sous-requête pour rassembler les chiffres de la table des commentaires en utilisant la table des entrées comme pilote. Quelque chose comme ce qui suit devrait "boucler" sur la table des entrées et pour chaque ligne exécuter la sous-requête (c'est peut-être une terminologie incorrecte) et mettre à jour le nombre de commentaires pour qu'il corresponde aux nombres correspondants de la table auxiliaire. J'espère que cela vous aidera !

U SET comment_count = (SELECT COUNT ( * ) FROM comments cmt WHERE cmt.blogentry_id = ent.id)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X