通过update replace where sql语句在数据库中批量替换内容

以下是以案例来说明在数据库中批量替换的方法,可供菜鸟参考学习,但不能死板硬套,需要根据自已数据库表名称、字段名和替换目的要求做调整。

替换目的和方法:

一、目的

双11来临时,我们想给乐道主机的所有会员通过会员注册邮箱发送双11服务器优惠活动邮件,会员有几万个,不可能一次给所有会员发邮件,因为邮件内容相同且带广告性质,一次批量发几万邮件很容易被对方邮箱系统拦截发不过去,起不到推广效果。

那先要对所有乐道主机的会员进行分组,我们的会员系统支持创建分组,我要把几万个会员每成几组,如将5万会员分成10组,每组大约5000人左右,在发推广邮件时是按一组组的去发邮件,可以换不同邮件名去发给每组,这样不容易被拦截。

如要手动给每个会员去分组,工作量太大,一个人需要几天才能分组完成,工作也很枯燥。

这时需要在phpmyadmin 或 Navicat for MySQL数据库表中去批量替换分组就很容易。

我的所有会员都记录在:tblclients 这个数据库表内。

有几个重要的字段名:id 、datecreated、groupid

本来我是可以用字段id通过sql语句批量替换分组,但因有些注册会员被人工删除,导致id不连续有丢失,就没有通过id去分组,但实际也是可以用id分组。

以下二种方法都可以实现我们的目的。

方法一、先创建分组,在通过id把所有会员分配到各分组内。

先在我的网站后台管理中创建10个分组,如名称为:推广1组、 推广 2组……. 推广10组,创建好后,把任一个会员帐户放在: 推广1组 里会在数据库tblclients表里的groupid字段会显示该:推广1组 对应的数值,如上图中, groupid数值0,代表所有会员没有分组下是0, 推广1组数值是1、 推广1组数值是2,以此类推。

在phpmyadmin管理中使用以下SQL语句:

UPDATE tblclients SET groupid = replace(groupid,0,1) where id >= 5000

tblclients是数据库表,要改成你自已的, UPDATE SET replace是SQL语句命令,这段sql语句意思是,把大于5000的id会员替换到: 推广1组 里, groupid,0,1 这儿代表把没有分组的会员移到: 推广1组里, 现在推广1组里会有4.5万个会员。

继续执行: UPDATE tblclients SET groupid = replace(groupid,1,2) where id >= 10000

这句意思是从: 推广1组 里把id大于10000的会员移到: 推广2组 里,现在 推广1组 里剩5000个会员, 推广2组 里有4万个会员。

继续执行: UPDATE tblclients SET groupid = replace(groupid,2,3) where id >= 15000

这句意思是从: 推广2组 里把id大于15000的会员移到: 推广2组 里,现在 推广2组 里剩5000个会员, 推广3组 里有3.5万个会员。

以此类推,直到在 推广9组 里有5000个会员,在把没有分组0的移动到: 推广10组 里。

UPDATE tblclients SET groupid = replace(groupid,0,10)

几次操作下来, 推广1组 到 推广10组 里,大约每个组里面有5000个左右的会员。

方法二、 先创建分组,在通过会员注册的时间分组。

UPDATE tblclients SET groupid = replace(groupid,0,1) where datecreated <= ‘2015-12-30’

这句意思是把2015-12-30日前注册的会员都移到: 推广1组 里。

现在没有分组0里剩下2015年12月30日之后注册的会员,

继续执行 UPDATE tblclients SET groupid = replace(groupid,0,2) where datecreated <= ‘2016-12-30’

这句意思是把2016-12-30日前注册的会员都移到: 推广2组 里。

以此类推,直到今天2021年11月之前注册的会员移动到你想放的会员分组里。

datecreated是数据库 tblclients 中的会员注册时间字段名,where是条件语句,按实际情况,也可以用 where datecreated >= ‘2016-12-30’ ,代表2016年12月30日之后注册的会员。

文中多次提到id,id就是图片所示,这是主键,默认从1开始,第一个注册的会员id是1,第二个注册的会员id是2,在你不删会员的情况下是完整的按1递增,因为我有删过会员,导致id1 和id2没有了。

以上只是按我们的数据库表名称、字段名 和情境目的去批量替换,你自已要根据你的数据库字段和目的情境去设计批量替换条件。

其他内容批量替换也可参考我们的其他文章:https://www.ldhost.cn/jc/mysql/409.html

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注