2010-11-02 47 views
0

我的意見表和崗位的MySQL減去同一行中多次更新

每當一個帖子被刪除的表,查詢運行減去的評論的數量從每個(這些後來被刪除)用戶COMMENT_COUNT

因此,如果用戶有在後2個評論,而後期被刪除,它們的資產負債應該有2個從它

我查詢減去如下:

UPDATE users 
INNER JOIN comment ON users.id = comment.author 
     SET comment_count = comment_count - 1 
    WHERE comment.post = 1 

用戶A擁有2條評論與.POST = 1,但出於某種原因,用戶只有得到COMMENT_COUNT減去1次,當它應該發生兩次

我想我的語法是正確的,因爲當我:

SELECT * 
     FROM users 
INNER JOIN comment ON users.id = comment.author 
    WHERE comment.post = 1 

我得到兩個結果用戶A

不宜UPDATE超過兩種結果迭代,每次減去?

有人可以解釋我失蹤了嗎?謝謝

回答

1

如果你打算將計,使用:

UPDATE USERS 
    SET comment_count = (SELECT COUNT(*) 
          FROM COMMENT c 
         WHERE c.author = USERS.id) 

...或:當

UPDATE USERS u 
    JOIN (SELECT c.author, 
       COUNT(*) AS numComments 
      FROM COMMENT c 
     GROUP BY c.author) x ON x.author = u.id 
    SET comment_count = x.numComments 

有沒有點在依靠兩個記錄減去兩倍,你可以執行一次操作。

我不喜歡存儲這樣的值,因爲它們可以根據記錄進行計算,而無需保持計數同步的麻煩。 A view可能是一個更好的主意......

+0

+1好答案,不知道確切的MySQL語法,所以我等你回答X-) – 2010-11-02 04:45:49

+0

也可以通過觸發器維護它們。順便說一句,實時「COUNT(*)」幾乎總是很昂貴的(即當你需要「按評論排序」 - 獲得最受歡迎的出版物)。 – zerkms 2010-11-02 04:46:57

+0

@zerkms:我嘗試不使用觸發器,如果​​我不需要,MySQL旁邊的不可能:) – 2010-11-02 04:50:09