我的博客网站帖子有很多不同的类别;我也有总帖子总数,如何编写一个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的所有其他行的总和)
答案 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'