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;
这似乎是一种不正确的语法。我怎样才能在一个查询中完成这项工作?
答案 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将包含up
或down
。在下一个陈述中,条件是last_param
是向上还是向下。