mysql 三个表的触发器问题!

u010197058 2013-04-07 04:03:44
表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;
END
...全文
147 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
u010197058 2013-04-07
  • 打赏
  • 举报
回复
嗯。。对 就是这个!!! 就差了这一句!! and new.level<>old.level 3q!!!
wwwwb 2013-04-07
  • 打赏
  • 举报
回复
如果 playerId唯一 select userName from player WHERE playerId = new.playerId and new.level = 100 and new.level<>old.level
u010197058 2013-04-07
  • 打赏
  • 举报
回复
TRIGGER 是 after update 插入就是在chognzhi表里插入一条记录 insert into chongzhi (userName,chrName,costmoney,golden,chongzhichuli,datatime) values (@sql,@sql,'5000000','5000000','0',datatime = now()); userName 不能为空,但可以重复!
wwwwb 2013-04-07
  • 打赏
  • 举报
回复
你的TRIGGER是BEFORE INSERT? 你是怎样插入记录的
u010197058 2013-04-07
  • 打赏
  • 举报
回复
playerbattle 还有很多字段 比如现在hp=50 level=99 如果level=100了 就插入数据 现在的问题是 level=100的时候。hp 从50 变成51了。也会插入数据(这个case 应该是不插入的)
wwwwb 2013-04-07
  • 打赏
  • 举报
回复
没有明白, level=100 再修改其他字段的时候。也会插入数据。预期是不插入 只有level=100 才插入 到底是否插入?举例说明
u010197058 2013-04-07
  • 打赏
  • 举报
回复
感觉wwwwb的帮忙 if @sql IS NOT NULL then 不是这个问题 你这么写 我也试过。 也可以的。 但现在的问题还是存在。 level=100 再修改其他字段的时候。也会插入数据。预期是不插入 只有level=100 才插入
wwwwb 2013-04-07
  • 打赏
  • 举报
回复
if @sql IS NOT NULL then .... OR if IFNULL(@sql,1)<>1 THEN ....

56,687

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧