2016-06-18 2 views
0

Als Frage Titel sagt, ich für eine Art und Weise bin auf der Suche dies nur in einem SQL-Aufruf zu erreichen:

UPDATE accountEnergy SET value=LEAST(value+$energyChange, maxValue) 

Meine Lösung mit zwei Anrufen:

mysqli_query($db, "UPDATE accountEnergy SET value=value+$energyChange WHERE accountId=$accountId"); 
mysqli_query($db, "UPDATE accountEnergy SET value=maxValue WHERE accountId=$accountId AND value>maxValue"); 
+1

Können Sie sagen, warum werden Sie nicht die erste Spur verwenden? Der mit dem wenigsten? – Whencesoever

+1

, weil dieser Einzeiler einen mysql-Fehler verursacht –

+0

Tut es? Welche Art von Fehler? – Whencesoever

Antwort

2

würde ich diese Anwendungslogik in Ihre Anwendung setzen, nicht in die Datenbank (Abfrage).

Das heißt, können Sie dies mit einer Unterabfrage lösen:

UPDATE yourTable 
SET yourValue = (
    SELECT LEAST(yourValue + $change, yourMax) 
    FROM yourTable 
    WHERE yourId = $yourId 
) 
WHERE yourId = $yourId 

Edit: Es scheint, dass MySQL Sie die Tabelle, die Sie aktualisieren, auch in einer Unterabfrage verweisen nicht gestattet.

Eine Lösung für dieses Problem wird in this StackOverflow answer gezeigt.

+0

Wert und maxValue kommentiert werden Wörter von SQL registriert, um sie in '' löste es UPDATE w1_account_energy SET 'value' = ( MINDESTENS SELECT setzen (' value' + 10, 'maxValue') FROM w1_account_energy WHERE accountId = 1 ) WHERE accountId = 1 wirft jetzt: # 1093 - Sie können keine Zieltabelle angeben 'w1_account_energy' for update in FROM-Klausel –

+0

Was ist der Fehler? – Timo

+0

Ist es jetzt gelöst oder nicht? Nicht sicher, wie Sie den bearbeiteten Kommentar lesen können. – Timo

Verwandte Themen