mysql 批量更新(可用存储过程)
数据大概是这样的:广告id(id)IP(ip)时间(date)点击量(click)1198.25.54.4511254987101185.45.14.4711547899...
数据大概是这样的:
广告id(id) IP(ip) 时间(date) 点击量(click)
1 198.25.54.45 11254987 10
1 185.45.14.47 11547899 100
2 184.78.45.14 13457489 10
要执行的语句用平常的MySQL 语句写出来是:
update tableName set click=click+2 where id=1 and ip='198.25.54.45' and date=11254987;
update tableName set click=click+4 where id=1 and ip='185.45.14.47' and date=11547899;
update tableName set click=click+3 where id=2 and ip='184.78.45.14' and date=13457489;
大概示例就是这样 想一次更新完成 因为数据可能较为庞大 大概一次会更新1000条左右 所有求大神帮忙 展开
广告id(id) IP(ip) 时间(date) 点击量(click)
1 198.25.54.45 11254987 10
1 185.45.14.47 11547899 100
2 184.78.45.14 13457489 10
要执行的语句用平常的MySQL 语句写出来是:
update tableName set click=click+2 where id=1 and ip='198.25.54.45' and date=11254987;
update tableName set click=click+4 where id=1 and ip='185.45.14.47' and date=11547899;
update tableName set click=click+3 where id=2 and ip='184.78.45.14' and date=13457489;
大概示例就是这样 想一次更新完成 因为数据可能较为庞大 大概一次会更新1000条左右 所有求大神帮忙 展开
2个回答
展开全部
update tableName set click=click+
case
when id=1 and ip='198.25.54.45' and date=11254987 then 2
when id=1 and ip='185.45.14.47' and date=11547899 then 4
when id=2 and ip='184.78.45.14' and date=13457489 then 3
end;
case
when id=1 and ip='198.25.54.45' and date=11254987 then 2
when id=1 and ip='185.45.14.47' and date=11547899 then 4
when id=2 and ip='184.78.45.14' and date=13457489 then 3
end;
更多追问追答
追问
能问下 这样更新的时候怎样让如果条件不存在 新生成数据 可以吗?
追答
你把 能想到的 条件 都写到 case when 里面,满足条件 就可更新。不满足,不更新
update tableName set click=click+
case
when id=1 and ip='198.25.54.45' and date=11254987 then 2
when id=1 and ip='185.45.14.47' and date=11547899 then 4
when id=2 and ip='184.78.45.14' and date=13457489 then 3
/* 所有条件 */
else 0
end;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
不知道你这个click=click+2,+3,+4 是怎么个规律??是所有数据都加的一样的?
更多追问追答
追问
不一样,比如这么说吧
我要更新的数据放在一个数组里了,是这个样的
$array = array(
'1_198.25.54.45_11254987'=>(int)2,
'1_185.45.14.47_11547899'=>(int)4,
'2_184.78.45.14_13457489'=>(int)3,
);
然后普通的方法就是循环这个数组 然后拼成上面说的sql语句就可以更新。
因为数据大,所以想看看通过什么方法能做成一次更新的
追答
哦 你有这样的一个数组
最笨的那就是循环数组 这个你知道的 费劲 又慢
然后你说的存储过程 其实跟循环数组一样的 就是循环的地方不一样
但是存储过程比直接sql循环省事,效率要高
=> 还是要foreach循环数组 取得 4个参数值,然后吧这4个值传给存数过程
数据库写个存储过程,接受4个值 然后去更新
存储过程是一组予编译的SQL语句
它的优点:1.允许模块化程序设计,就是说只需要创建一次过程,以后在程序中就可以调用该过程任意次。
2.允许更快执行,如果某操作需要执行大量SQL语句或重复执行,存储过程比SQL语句执行的要快。
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询