1
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;

这似乎是不正确的语法。我还能如何在单个查询中完成这项工作?

4

2 回答 2

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 
于 2012-06-24T07:39:43.343 回答
0

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

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

现在 @last_param 将包含upor down。在下一个语句中可以以 iflast_param为 up 或 down 为条件。

于 2012-06-24T07:28:10.270 回答