2010-02-12 156 views
1

我接管了一個包含兩個表的數據庫,我們將其命名爲entriescommentsentries表包含一個名爲comment_count的列,該列保存與中該行對應的comments中的entry_id的行數。mysql基於二級表中的行的mysql重新計算列

最近,由於代碼庫的版本切換,此連接已變得非常不同步。我需要幫助來構建一個查詢,以在phpmyadmin中運行以再次同步這些數字。 entries中的行數約爲8000,comments中的行數約爲80000,因此運行同步查詢應該不會有任何問題。

結構:

  • entries countains:
  • id | comment_count | etc
  • comments contains
  • id | blogentry_id |等

我能想到的是循環在entries表PHP中的每個條目,並單獨更新,但與純SQL的解決方案,似乎是脆弱的極端的唯一途徑。

我會appriciate任何幫助!

回答

2

我認爲一個純粹的SQL解決方案會使用子查詢來從包含條目表作爲驅動程序的評論表中收集計數。類似下面的內容應該在條目表上「循環」,並且對於每一行執行子查詢(這可能是不正確的術語),並且將評論計數更新爲輔助表的相應計數的計數。希望有所幫助!

UPDATE entries ent 
    SET comment_count = 
     (SELECT COUNT (*) 
      FROM comments cmt 
      WHERE cmt.blogentry_id = ent.id) 
+0

乾杯,工作完美無瑕! =) – moodh 2010-02-12 14:28:38

3
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 
+0

謝謝,但我會與解決方案下,因爲它是一個純粹的更新=) – moodh 2010-02-12 14:29:10