INSERT IF条件满足

时间:2012-06-24 06:27:17

标签: mysql

IF (( SELECT param FROM changes WHERE type = 'uptime' AND website_id = 1 ORDER BY timestamp DESC LIMIT 1 ) != 'up' )
    INSERT INTO changes ( website_id, timestamp, type, param ) VALUES ( 1, NOW(), 'uptime', 'up' )
END IF;

这似乎是一种不正确的语法。我怎样才能在一个查询中完成这项工作?

2 个答案:

答案 0 :(得分:4)

为什么要使用IF在查询外读取参数记录而不是仅在WHERE条件中添加它?如果您这样做,那么您可以只插入完整的查询,如果查询返回您的数据将被插入的内容,如果您的查询没有返回任何内容,则不会插入任何内容:

INSERT INTO changes ( website_id, timestamp, type, param )
     SELECT 1, NOW(), 'uptime', 'up'
       FROM changes 
      WHERE type = 'uptime' AND website_id = 1 AND param != 'up' LIMIT 1 

答案 1 :(得分:0)

changes似乎是记录事件的表。鉴于INSERT的所有变体,不可能这样做。您可以尝试使用STORED PROCEDURE来实现它。您可以执行以下操作:

select param into @last_param from changes where website_id = 1 and type = 'uptime' limit 1;

现在@last_param将包含updown。在下一个陈述中,条件是last_param是向上还是向下。