2016-04-20 5 views
0

Ich habe diese Tabelle:Wie kann ich den Wert des Datensatzes vor der Aktualisierung überprüfen?

// QandA 
+----+-----------+-----------------+-------------+------+------+ 
| id | post | accepted-answer | question_id | let | type | 
+----+-----------+-----------------+-------------+------+------+ 
| 1 | question1 | null   | 1   | 200 | 0 | 
| 2 | answer1 | null   | 1   | null | 1 | 
| 3 | answer2 | 1    | 1   | null | 1 | 
| 4 | answer3 | null   | 1   | null | 1 | 
+----+-----------+-----------------+-------------+------+------+ 
//              ^0 = question | 1 = answer 

Auch ich habe diese Anfrage:

// this query changes accepted answer 
UPDATE QandA 
SET accepted_answer = IF(id <> :id, NULL, 1) 
WHERE question_id = :question_id; 

Jetzt let Feld zu überprüfen, bevor die Aktualisierung ich versuche. Etwas wie dieses:

if (`let` is null) then {update here} 
else {don't update} 
where `question_id` = :question_id and `type` = 0 

Wie kann ich das in MySQL tun?

+2

Können Sie '' und 'let' is null'' in die where-Bedingung einfügen? – Kateract

+0

@Kateract emm, scheint richtig, ich dachte, es ist härter .. Wie auch immer, danke, ich werde es versuchen. – stack

Antwort

1

Sie können die case-Anweisung verwenden, die folgende Anweisung aktualisiert die QandA-Tabelle.

Es accepted_answer gesetzt wird 1 sein, wenn let null ist und der Typ 0.

Probieren Sie es, ich weiß es MS SQL, kann einfach nicht den Zugang meine SQL-Box im Moment.

UPDATE QandA SET accepted_answer = 
CASE 
    WHEN let = IS NULL THEN 1 
END 
WHERE type= 0; 
+0

Vielen Dank .. bis abstimmen. Nur in Wirklichkeit gibt es nicht nur eine Zeile 'type = 0'. Also denke ich, dass Sie die 'where'-Klausel in Ihrer Abfrage verbessern müssen. – stack

+0

Ich bin sicher, dass Sie nur die Additionsprüfung hinzufügen können, wollen Sie 'question_id' =: question_id in dem sein, wenn ja, überprüfen Sie einfach. – justinf