更新sql语句所有列值的总和

时间:2012-09-30 22:11:15

标签: php mysql

我的博客网站帖子有很多不同的类别;我也有总帖子总数,如何编写一个sql语句来更新帖子总数中的条目=我的不同类别总和的数量?

这是我的目标

$blog_number_update = "UPDATE `blog_categories` SET `posts_counter` = '(total of all other rows with an number greater then 0 in the posts_counter column)' WHERE `name` = 'Number'"

怎么写这个?

(posts_counter列中数字大于0的所有其他行的总和)

3 个答案:

答案 0 :(得分:0)

您可以使用子查询组合这些查询。

这样的东西
 UPDATE `blog_categories` SET `posts_counter` =(SELECT SUM(posts_counter) FROM blog_categories WHERE posts_counter>0) WHERE `name` = `value`

应该可以正常工作。但是,对于大型数据集,这可能会产生一些严重的性能影响。

答案 1 :(得分:0)

我不认为将计数器及其总和存储在同一个表中是个好主意。为这种统计数据设置一个单独的表格会更明智(只有在运行时计算它们的速度太慢)。

这是绕过MySQL WHERE子句中UPDATE子句中不使用同一个表的限制的方法:

UPDATE
        ( SELECT SUM(posts_counter) AS counter_sum
          FROM blog_categories 
          WHERE posts_counter > 0 
            AND ( name <> 'Number' OR name IS NULL ) 
        ) AS s 
    CROSS JOIN 
        blog_categories AS b
SET
    b.posts_counter = s.counter_sum
WHERE 
    b.name = 'Number' ;

答案 2 :(得分:-1)

您无法在MySQL中更新您选择的表格 - 因此在一个查询中无法做到这一点。

要分为两部分,你可以

SELECT SUM(posts_counter) FROM blog_categories WHERE posts_counter>0

WHERE子句是多余的,如果你没有负值,则将结果输入PHP变量$posts_counter,然后运行

UPDATE `blog_categories` SET `posts_counter` = $posts_counter WHERE `name` = 'Number'