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

WHERE条件に追加するのではなく、IFを使用してクエリの外部でパラメータレコードを読み取るのはなぜですか?このようにすると、完全なクエリを挿入できます。クエリが何かを返す場合はデータが挿入され、クエリが何も返さない場合は何も挿入されません。

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にはまたはが含まれupますdown。次のステートメントでは、last_paramが上か下かを条件にすることができます。

于 2012-06-24T07:28:10.270 に答える