有两个表:a 和 b表a结构:
name email gender nirc mobile
xx xxx x xxx xx表b是一个临时表,结构与表a相同。我现在需要根据临时表b中的数据来更新表a,有三个关联条件字段:email,nirc和mobile,
按这三个字段的顺序来更新表a,
mysql语句如下:
1.update a join b on a.email = b.email
set a.(除了email字段之外的字段) = b.(除了email字段之外的字段)2.update a join b on a.nirc= b.nirc
set a.(除了nirc字段之外的字段) = b.(除了nirc字段之外的字段)3.update a join b on a.mobile= b.mobile
set a.(除了mobile字段之外的字段) = b.(除了mobile字段之外的字段)上面的语句是简写,程序里我是用循环一个一个字段的更新的(语句写得很烂,可以执行就ok,有好的语句请不吝赐教!)。更新完成后,我想获得表a被更新的记录的条数,但出现了一点问题,
本来我是想在每一个更新语句执行完成后,用mysql_affected_rows()来取影响的行数,
然后把这个些行数都记录下来,累加起来当作表a被更新记录的条数,
可是我发现有时候表a中一条记录可能有多个字段被更新,这样一来每更新一个字段就当做一个被更新的记录被累加了,
结果导致我上面累加的做法并不能反映表a实际上被更新的记录数。部分代码如下://放的是除了mobile字段之外的字段
$temparr=array(“name”,“email”,“gender”,“nirc”);
//遍历字段数组,执行更新操作
foreach($temparr as $value)
{
$q='update a join b on a.mobile= b.mobile
set a.'.$value.' = b.'.$value.'
where b.'.$value.' is not null';
$result=mysql_query($q); //记录更新记录条数
$updatenum+=mysql_affected_rows();
}
各位大侠帮帮忙,怎么样才能正确的取得更新记录的条数呢?
name email gender nirc mobile
xx xxx x xxx xx表b是一个临时表,结构与表a相同。我现在需要根据临时表b中的数据来更新表a,有三个关联条件字段:email,nirc和mobile,
按这三个字段的顺序来更新表a,
mysql语句如下:
1.update a join b on a.email = b.email
set a.(除了email字段之外的字段) = b.(除了email字段之外的字段)2.update a join b on a.nirc= b.nirc
set a.(除了nirc字段之外的字段) = b.(除了nirc字段之外的字段)3.update a join b on a.mobile= b.mobile
set a.(除了mobile字段之外的字段) = b.(除了mobile字段之外的字段)上面的语句是简写,程序里我是用循环一个一个字段的更新的(语句写得很烂,可以执行就ok,有好的语句请不吝赐教!)。更新完成后,我想获得表a被更新的记录的条数,但出现了一点问题,
本来我是想在每一个更新语句执行完成后,用mysql_affected_rows()来取影响的行数,
然后把这个些行数都记录下来,累加起来当作表a被更新记录的条数,
可是我发现有时候表a中一条记录可能有多个字段被更新,这样一来每更新一个字段就当做一个被更新的记录被累加了,
结果导致我上面累加的做法并不能反映表a实际上被更新的记录数。部分代码如下://放的是除了mobile字段之外的字段
$temparr=array(“name”,“email”,“gender”,“nirc”);
//遍历字段数组,执行更新操作
foreach($temparr as $value)
{
$q='update a join b on a.mobile= b.mobile
set a.'.$value.' = b.'.$value.'
where b.'.$value.' is not null';
$result=mysql_query($q); //记录更新记录条数
$updatenum+=mysql_affected_rows();
}
各位大侠帮帮忙,怎么样才能正确的取得更新记录的条数呢?
-- 创建一个表用来记录A表被更新次数
create table Update_table(Update_times int);
-- 在A表建一个触发器,每更新一次,记录加1
CREATE TRIGGER trig_update after update ON a
FOR EACH ROW BEGIN
update Update_table set Update_times=Update_times+1;
END;
结果导致我上面累加的做法并不能反映表a实际上被更新的记录数。从你这段话的描述来看,是要所有字段都进行了修改,才算修改一次。那1楼的方法不行。
提供个思路
1:创建一个A表的克隆表A1,写入A的同时也写入A1,这个可以用触发器做到
2:查询的时候可以这样
select count(*) from a,a1 where a.id<>a1.id and a.name<>a1.name .....
枚举出所有字段,得到的这个COUNT就是每个字段都进行了修改了的条数。但这样又存在一个问题,如果我把A.ID从1修改成2,然后又修改成1了,这样的这个ID算是修改过的,还是未修改的?
比如说表b里是这样:
name email gender nirc mobile
kk [email protected] Male S178 15945545876
dd [email protected] Female S546 15945534567表a里是这样:
name email gender nirc mobile
kk [email protected] Male S123 15945545876
dd [email protected] Male S546 15945534567按我的方法来用表b更新表a,就会得出有三条记录被更新,而实际上只是两条记录被更新。我想的是能不能每一次更新时,能取到被更新的行的id,记录下来,这样到最后把id重复的算做一个,再计算一下有id总数,就是实际上被更新的记录了。。需要用什么方法实现呢?
我想的是能不能每一次更新时,能取到被更新的行的id,记录下来,这样到最后把id重复的算做一个,再计算一下有id总数,就是实际上被更新的记录了。。需要用什么方法实现呢?你这个想法下,不能解决我说的这个问题
这样的应该算改过的,只不过改了两次嘛。这个问题已经解决了,我在更新前就把需要做更新的记录的id都记录下来,以id的值为索引存入数组中,这样根据数组索引唯一的特性就能解决重复问题,当更新语句全部执行完成后,我在取这个数组里元素的个数,
即得到实际上被更新的记录的条数了。结贴了,非常谢谢你~无以为报,只能给分了,不要嫌少啊!呵呵。。