<p>有这么个需求</p><p>
</p><p>topic表中有id 和comments数量</p><p>
</p><p>commemt表中有 topicid 和id</p><p>
由于历史原因,【删除评论表中时未同步删除topic中评论数量的值】,</p><p>所以要求一条语句执行更新。(当然用php写个foreach也可以)。
<pre name="code" class="sql">drop procedure if exists add_demo;
# 创建存储过程 add_test
CREATE PROCEDURE add_demo()
BEGIN
#定义 变量
#a 评论数量
#b id话题
DECLARE a int;
DECLARE b int;
#此变可有可无,为了给个该存储函数执行成功后给个提示,运行下便知道
DECLARE str VARCHAR(300);
DECLARE x int default 123;
#这个用于处理游标到达最后一行的情况
DECLARE s int default 0;
#声明游标cursor_name(cursor_name是个多行结果集)
DECLARE cursor_name CURSOR FOR select count(topicid), topicid from t_comment group by topicid;
#设置一个终止标记
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET s=1;
set str = "--";
#打开游标
OPEN cursor_name;
#获取游标当前指针的记录,读取一行数据并传给变量a,b
fetch cursor_name into a,b;
#开始循环,判断是否游标已经到达了最后作为循环条件
while s <> 1 do
set str = concat(str,b);
update t_topic set comments =a where id =b;
#读取下一行的数据
fetch cursor_name into a,b;
end while;
#关闭游标
CLOSE cursor_name ;
select str;
set @aa='12';
select @aa;
#语句执行结束
END;
#调用存储函数add_test
CALL add_demo()
当然也可以利用临时表来创建,
感谢波波的分享。