如何使用select查询的结果更新一行的多个mysql列?

时间:2012-07-09 23:37:43

标签: php mysql yii

我有一个评论表,其中包含三种评价项目的方法。然后项目本身有三列来分别保存每个值的平均值。

我可以在更新查询中使用三个嵌套查询来做到这一点,但我觉得这样效率很低......有没有办法一次更新所有这些?

到目前为止,我已将此作为我的选择查询:

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

我只是不知道如何使用该查询的结果来更新项目行。

1 个答案:

答案 0 :(得分: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