mysql> desc goods//
+-----------+----------+------+-----+---------+-------+
| Field     | Type     | Null | Key | Default | Extra |
+-----------+----------+------+-----+---------+-------+
| useid     | char(10) | YES  |     | NULL    |       |
| goodsname | char(15) | YES  |     | NULL    |       |
| price     | int(20)  | YES  |     | NULL    |       |
| number    | int(10)  | YES  |     | NULL    |       |
| cost      | int(20)  | YES  |     | NULL    |       |
+-----------+----------+------+-----+---------+-------+
5 rows in set (0.01 sec)mysql> desc user//
+----------+----------+------+-----+---------+-------+
| Field    | Type     | Null | Key | Default | Extra |
+----------+----------+------+-----+---------+-------+
| useid    | char(10) | YES  |     | NULL    |       |
| sum      | int(20)  | YES  |     | NULL    |       |
| integral | int(20)  | YES  |     | NULL    |       |
+----------+----------+------+-----+---------+-------+
3 rows in set (0.00 sec)
以上一两张表的结构,要实现的功能是当goods表中插入数据时如果user(这个表中已经插入数据)表中有useid相同的就把(goods.price-goods.cost)*goods.number*015的结果插入到user.integral中,并且当user.integral的值大于1000的时候,就减掉1000让user.sum的值增加100.
我触发器实现了前半部代码如下:
 create trigger ss
 before insert on goods
 for each row begin
  update user set integral=((new.price-new.cost)*new.number*0.15+user.integral) where user.useid=new.useid;
 end;
//
剩下的使了n种方法都实现不了,望高手指点!!

解决方案 »

  1.   

    update user set integral=
    IF(integral>=1000,integral-1000,
    ((new.price-new.cost)*new.number*0.15+user.integral)) ,
    SUM=IF(integral>=1000,SUM+100,SUM)
    where user.useid=new.useid;
      

  2.   

    谢谢你,但是你的这个方法要是user.integral一下插入的值大于2000他会保留user.integral-1000。其中sum的值也只是加100.还是不能完全的控制这个插入的值一下更改。
      

  3.   

    mysql> insert into goods values("as","as",1510,230,180)//
    Query OK, 1 row affected (0.00 sec)mysql> select * from user//
    +-------+------+----------+
    | useid | sum  | integral |
    +-------+------+----------+
    | as    |  100 |    45885 |
    +-------+------+----------+
    1 row in set (0.00 sec)
      

  4.   

    最终要的结果是这样的要是执行这条语句:insert into goods values("as","as",1510,230,180)// 
    应该出现这样的结果:
    +-------+------+----------+ 
    | useid | sum  | integral | 
    +-------+------+----------+ 
    | as    |  4600|      885 | 
    +-------+------+----------+ 
    这样就完美了!!
    呵呵。
      

  5.   

    呵呵,你总有一个计算方法嘛
    new.price-new.cost)*new.number*0.15+user.integral?
      

  6.   

    new.price-new.cost)*new.number*0.15+user.integral1510,230,180
    (1510-180)*230*.15=45885sum、integral值是多少+-------+------+----------+
    | useid | sum  | integral |
    +-------+------+----------+
    | as    |  4600|      885 |
    +-------+------+----------+ 
      

  7.   

    sum、integral初始值是多少 
      

  8.   

    从你要求结果来看:
    integral:(1510-180)*230*.15=45885-45000
    sum:45000/10+100确实没有明白你的计算方法
      

  9.   

    这里应该是:
    +-------+------+----------+ 
    | useid | sum  | integral | 
    +-------+------+----------+ 
    | as    |  4500|      885 | 
    +-------+------+----------+ 
    刚刚计算错了,
    再次谢谢你~
      

  10.   

    是否只取右边三位?
    45885 885?
    如是:
    select right(cast(45885 as char),3),
    (45885-(0+right(cast(45885 as char),3)))/10在你的TRIGGER中,将45885修改成你的
    (new.price-new.cost)*new.number*0.15公式
      

  11.   

    IF(integral>=1000,integral-1000, 
    ((new.price-new.cost)*new.number*0.15+user.integral)) , 
    SUM=IF(integral>=1000,SUM+100,SUM) 
    仔细看过过这个代码感觉也不合理:当integral>=1000是也要加上这个的((new.price-new.cost)*new.number*0.15+user.integral))。只不过加了之后只要是大于1000就让这个字段减去1000然后再sum字段是加上100。但是IF(integral>=1000,integral-1000, 
    ((new.price-new.cost)*new.number*0.15+user.integral))写只要是大于1000就不会加了,只是减去1000。上面的我测试一下。看是否出的结果和想要的结果一样。
      

  12.   

     create trigger sss
     before insert on goods
     for each row begin
      update user set integral=(new.price-new.cost)*new.number*0.15+user.integral,sum=if(integral>=1000,sum+100,sum),integral=if(integral>=1000,integral-1000,integral)
    where user.useid=new.useid;
     end;
    //暂时这样解决的,但是还是不能一次插入的sum的值大于2000.郁闷中。
    想到更好的办法再给大家看看吧,再次谢谢楼上的!!
      

  13.   

    但是还是不能一次插入的sum的值大于2000:举例说明
      

  14.   

    不是goods表里有userid的内容吗?你这个new.userid是啥