2016-10-03 3 views
1

私は質問/回答システムを持っており、質問に答えたときに応答時間を記録しようとしています。私が使用していますINSERTコードの別の行から値を挿入し、ハンドル行が存在しません。 Mysqlの挿入

シンプルスニペット:

INSERT INTO questions (responsetime, {otherfields}) 
(SELECT Now-msgDateTime, {otherfields} FROM questions WHERE headerid='This_Header_id' ORDER BY id DESC LIMIT 1) 

これは、スレッド内のすべての二次のメッセージのために絶対にうまく動作しますが、スレッドの最初のメッセージのために、それは新しい、ユニークなHeaderIdを持つことになり、したがって、クエリ

(SELECT * FROM questions WHERE headerid='This_Header_id') 

値を返しません。この場合、私の最初のSQLの更新はINSERT新しい行ではありません。

headeridで選択された行がNULLresponsetimeフィールドに「0」を挿入するには、どのようにフォールバックを記述しますか?

答えて

0

MAXなどの関数でグループを使用すると、nullまたは一致する値が返されます。それを行うより良い方法があれば、他の答えを見るのが大好きですが、これはあなたのために働くと思われます。

INSERT INTO questions (responsetime, {otherfields}) 
(SELECT IF(ISNULL(MAX(headerid)), 0, Now-msgDateTime) 
    , {otherfields} 
    FROM questions WHERE headerid='This_Header_id' 
    ORDER BY id DESC 
    LIMIT 1 
) 
+0

ああ、それは素晴らしいです。ありがとう! :) –

関連する問題