Comment utiliser MAX dans un SET en MYSQL

Fermé
clodinfo - 9 oct. 2009 à 16:28
 clodinfo - 9 oct. 2009 à 17:56
Bonjour à tous,

J'essaye de mettre à jour une valeur dans une base de données MySQL de telle sorte que l'une des colonnes (val2) contiennent la valeur maximale atteinte pour cet enregistrement (val0) par une autre colonne (val1) qui peut être incrémentée ou décrémentée (un peu comme un thermomètre qui conserverait les valeurs MIN et MAX du mois).

La première méthode, qui marche très bien, consiste à faire un SELECT pour récupérer les valeurs actuelles val1 et val2 de l'enregistrement val0, d'incrémenter val1, de prendre le MAX de val1 et de val2 (en PHP) puis de faire un UPDATE de val1 et val2 avec le résultat, mais cela fait 2 appels à la base ...

J'ai donc essayé de ne le faire qu'en une seule fois, avec la ligne suivante :
UPDATE table SET val1=val1+1,val2=MAX(val1,val2) WHERE val0='test'
mais ça ne marche pas, j'ai un message d'erreur 1064 sur le MAX.

Il me semblait pourtant que l'on pouvait utiliser l'instruction MAX dans un SET. Je n'ai rien trouvé de ce style sur le net ... Quelqu'un comprend-il où est l'erreur ?

Merci à vous,

Clod
A voir également:

1 réponse

Pour simplifier l'énoncé précédent, les exemples ci-dessous sont probablement plus parlants.

On imagine qu'on décrémente un champ et qu'on ne veut pas qu'il devienne négatif :
- update table set nbr=nbr-1 fonctionne très bien
- update table set nbr=max(nbr-1,0) affiche un message d'erreur

Clod
0

Discussions similaires