2016-10-03 4 views
1

Ich habe ein Frage/Antwort-System und versuche, Reaktionszeit zu erfassen, wenn eine Frage beantwortet wird.Werte einfügen aus einer anderen Zeile und Handle-Zeile existiert nicht. Mysql einfügen

Einfache Schnipsel des INSERT Code Ich verwende:

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

Dies funktioniert für alle sekundären Nachrichten in einem Thread absolut in Ordnung, aber für die erste Nachricht in einem Thread wird es eine neue und einzigartige HeaderId haben, also eine Abfrage

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

Wird keine Werte zurückgeben. In diesem Fall wird mein erstes SQL-Update nicht eine neue Zeile INSERT.

Also, wie schreibe ich ein Fallback, um "0" in das Feld responsetime, wo die Zeile von headerid ausgewählt ist NULL?

Antwort

0

Sie sollten eine Gruppe mit einer Funktion wie MAX verwenden können, die entweder null oder einen passenden Wert zurückgibt. Wenn es einen besseren Weg gibt, es zu tun, würde gerne andere Antworten sehen, aber vermute, dass dies für Sie arbeiten wird.

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

Ah, das ist brilliant. Vielen Dank! :) –

Verwandte Themen