0

我的博客网站帖子有许多不同的类别;我也有总帖子数,怎么写一个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 的所有其他行的总数)

4

3 回答 3

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' ;
于 2012-12-13T08:09:42.773 回答
0

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

就像是

 UPDATE `blog_categories` SET `posts_counter` =(SELECT SUM(posts_counter) FROM blog_categories WHERE posts_counter>0) WHERE `name` = `value`

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

于 2012-09-30T22:30:35.127 回答
-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'
于 2012-09-30T22:20:29.017 回答