2012-07-09 55 views
1

我有一個評論表,其中包含三種方式來評價一個項目。項目本身有三列分別保存每個值的平均值。如何使用select查詢的結果更新一行的多個mysql列?

我可以在更新查詢中使用三個嵌套查詢來做到這一點,但我覺得這樣做效率低下......有沒有辦法一次全部更新它們?

到目前爲止我用這個作爲我的選擇查詢:

SELECT AVG(rating_1),AVG(rating_2),AVG(rating_3) FROM items_reviews WHERE item_id = 1 

我只是不知道如何使用查詢結果更新項目列。

+1

我想用3子查詢的查詢是這裏的最佳解決方案。性能影響可能可以忽略不計。 – gilden 2012-07-09 23:55:08

+0

嘿,謝謝你的努力!我確實嘗試了兩種解決方案,但我沒有運氣。可能是我的天真 – 2012-07-09 23:57:39

回答

1

你可以使用在UPDATE的加入:

UPDATE items a 
INNER JOIN 
(
    SELECT 
     item_id, 
     AVG(rating_1) AS avg1, 
     AVG(rating_2) AS avg2, 
     AVG(rating_3) AS avg3 
    FROM items_reviews 
    WHERE item_id = 1 
    GROUP BY item_id 
) b ON a.item_id = b.item_id 
SET 
    a.avgrating1 = b.avg1, 
    a.avgrating2 = b.avg2, 
    a.avgrating3 = b.avg3 
+0

這是一個令人印象深刻的查詢,起初我以爲它正在更新所有項目。謝謝! – 2012-07-10 00:08:25

+0

等一下,我想那個人確實如此,嘿。 – 2012-07-10 00:10:23

+0

你只想更新一個特定的項目嗎? – 2012-07-10 00:11:42

相關問題