2016-06-20 14 views
0

私はこの問題に悩まされています。これが私が今までに作った最初の引き金です(これにはかなり新しいです)。私はそれが書式設定の問題だと思う。私は、フィラーダダウンと呼ばれるテーブルを持っています。新しい行のB3_4_5の値が1であるかどうかをチェックするためにレコードが挿入されるたびに必要です。それが必要ならば、selectを実行してB3_4_5が0だった最後のエントリを見つけてください。 .stoptime値は、最後の0レコードの 'time'値になります。MYSQLトリガー最終行の値と設定を取得

私はそこにすべての部品があると思うが、走らせることはできない。助けてください。

DELIMITER $$ 
CREATE TRIGGER downinsert 
BEFORE INSERT ON 'filleradown' FOR EACH ROW BEGIN 
DECLARE downtime DATETIME; 
IF (NEW.B3_4_5 = '1') THEN 
    SELECT time INTO downtime FROM filleradown WHERE B3_4_5 = 0 ORDER BY time DESC LIMIT 1; 
    SET NEW.stoptime = downtime; 
END IF 
$$ 
DELIMITER ; 

UPDATE:私はここで少し良くコードを得ましたが、それでもいくつかのエラーを取得。

DELIMITER $$ 
CREATE TRIGGER downinsert BEFORE INSERT ON filleradown 
FOR EACH ROW 
BEGIN 
DECLARE dt DATETIME; 
IF NEW.B3_4_5 = '1' THEN 
SELECT MAX(time) INTO dt FROM filleradown WHERE filleradown.B3_4_5 = 0; 
SET NEW.stoptime = dt; 
END IF 
$$ 
DELIMITER ; 

私はエラーに

1064を取得する - あなたのSQL構文でエラーが発生しています。あなたのMariaDBサーバのバージョンに対応するマニュアルをチェックし、正しい構文が行末にある ''の近くで使用するようにしてください。

+0

どのようなエラーが表示されますか?また、あなたの 'select'クエリは準最適です。あなたは 'LIMIT、OFFSET'オーバーヘッドを取り除くので、' SELECT MAX(time)AS down time from filladown WHERE B3_4_5 = 0'のようなものを必要とします。 –

+0

@ N.B。メインポストを更新しました。私は少し修正しています –

+0

もう一度更新されました。デリミタがありません –

答えて

0

修正されました。文字通り、ENDステートメントがありませんでした。 facepalm

DELIMITER $$ 
CREATE TRIGGER downinsert BEFORE INSERT ON filleradown 
FOR EACH ROW 
BEGIN 
DECLARE dt DATETIME; 
IF NEW.B3_4_5 = '1' THEN 
    SELECT MAX(time) INTO dt FROM filleradown WHERE filleradown.B3_4_5 = 0; 
    SET NEW.stoptime = dt; 
END IF; 
END $$ 
DELIMITER ; 
関連する問題