2012-07-09 51 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

相关问题