表A  player  主要字段  [playerid]  [username]  
表B  playerbattle 主要字段  [playerid]  [level] 
表C  chongzhi     主要字段 [username]  [golden]表A 和表B 通过[playid] 进行关联
需求是  如果 playerbattle  的[level] 变化为100 则通过字段[playid]联合player表 查出 [username],然后把 [username] 插入到 chongzhi 表中!下面是我自己写的。但是有个问题是。。我想只有level=100(不管其他字段怎么变)的时候就插入记录。现在的情况是 level=100.其他字段变了。也插入记录了。大家帮我看下 问题怎么解决!!!BEGIN
set @sql = (select userName from player WHERE playerId = new.playerId and new.level = 100);
if !@sql then
   begin
     insert into chongzhi (userName,chrName,costmoney,golden,chongzhichuli,datatime) values (@sql,@sql,'5000000','5000000','0',datatime = now());
   end;
end if;   
ENDsqlinsert

解决方案 »

  1.   

    if @sql IS NOT NULL then
    ....
    OR
    if IFNULL(@sql,1)<>1 THEN 
    ....
      

  2.   

    感觉wwwwb的帮忙 if @sql IS NOT NULL then   不是这个问题你这么写 我也试过。 也可以的。但现在的问题还是存在。 level=100  再修改其他字段的时候。也会插入数据。预期是不插入只有level=100 才插入
      

  3.   

    没有明白, level=100  再修改其他字段的时候。也会插入数据。预期是不插入 只有level=100 才插入
    到底是否插入?举例说明
      

  4.   

    playerbattle 还有很多字段  比如现在hp=50  level=99如果level=100了 就插入数据现在的问题是 level=100的时候。hp 从50 变成51了。也会插入数据(这个case 应该是不插入的)
      

  5.   

    你的TRIGGER是BEFORE INSERT?
    你是怎样插入记录的
      

  6.   

    TRIGGER 是 after update 插入就是在chognzhi表里插入一条记录  insert into chongzhi (userName,chrName,costmoney,golden,chongzhichuli,datatime) values (@sql,@sql,'5000000','5000000','0',datatime = now());userName 不能为空,但可以重复!
      

  7.   

    如果 playerId唯一
    select userName from player WHERE playerId = new.playerId and new.level = 100
    and new.level<>old.level
      

  8.   

    嗯。。对 就是这个!!!
    就差了这一句!! and new.level<>old.level  3q!!!