如何在mysql中存储选择结果?

时间:2014-05-07 01:51:46

标签: mysql

在mysql中,我有一个触发器来检查冲突,并更新发生冲突的行的hp值。我还将射弹的布尔值设置为true表示稍后应将其删除。但我似乎做了两次,我宁愿做一次。

DELIMITER // 
CREATE TRIGGER checkcollision2 BEFORE UPDATE ON projectiles 
FOR EACH ROW  
BEGIN  
    SET @unit_size:=25;

    IF (SELECT count(*) FROM players WHERE wolf=1 AND NEW.x>=x AND NEW.x<=x+@unit_size AND NEW.y>=y AND NEW.y<=y+@unit_size)>0 THEN 
        SET NEW.deleted=1; 
        UPDATE players SET hp=hp-NEW.dmg WHERE wolf=1 AND NEW.x>=x AND NEW.x<=x+@unit_size AND NEW.y>=y AND NEW.y<=y+@unit_size; 
    END IF; 

END;//  
DELIMITER ;  

在上面,我做了一个select,它给出了碰撞的行数。然后在下面我做同样的查询,因为我想更新那些相同的行。我本来可以完成更新,但如果至少有一行受到影响,我只想做SET NEW.deleted=1;。如果我只保留更新声明,我不知道该怎么做。

有没有人知道这样做的击球方式?

由于

1 个答案:

答案 0 :(得分:0)

如果要根据NEW.deleted上受影响的行数设置update值,则可以使用ROW_COUNT()检查受影响的行数。

示例

DELIMITER // 
CREATE TRIGGER checkcollision2 BEFORE UPDATE ON projectiles 
FOR EACH ROW  
BEGIN  
    SET custom_unit_size := 25;

    UPDATE players 
       SET hp = hp - NEW.dmg 
     WHERE wolf   = 1 
       AND NEW.x >= x 
       AND NEW.x <= x + custom_unit_size 
       AND NEW.y >= y 
       AND NEW.y <= y + custom_unit_size; 

    IF ROW_COUNT() > 0 THEN
        SET NEW.deleted = 1;
    END IF;
END;
//  

DELIMITER ;  

请参阅

  • ROW_COUNT()
    • 返回最后一个语句更改,删除或插入的行数(如果它是UPDATE,DELETE或INSERT)。对于其他陈述,该值可能没有意义。