Version complète: sur le forum Webmaster Hub : Update avec Min et Max ?
Webmaster Hub > Création et exploitation de Sites Internet > Les langages du Net > SQL
sarc
Bonjour à tous,

J'ai des données en pourcentage dans ma base de données, et j'aimerais pouvoir les modifier rapidement tout en faisant en sorte qu'elles restent comprises entre 0 et 100...
Par exemple si on a 99% et qu'on ajoute 5, que ça reste bloqué à 100, et de même pour 0.

J'ai bien essayé avec Min et Max :
CODE
Update Machin set pourcentage = min(100, max(pourcentage+5, 0))
mais ça me renvoie un message d'erreur, la syntaxe est incorrecte... Je suppose donc que c'est pas comme ça qu'il faut faire hypocrite.gif

Bon bien sûr je peux toujours extraire les données, les tester avec PHP, et remettre la bonne valeur, mais je préférerais aller au plus court avec Sql si possible, donc s'il y a une solution, vous seriez sympas de me la donner smile.gif

Merci d'avance
Bourinho
Salut, je peux te proposer un truc...

Tout d'abord, MIN et MAX sont des fonctions d'agregation (pour les GROUP BY), donc il est normal que ce que tu cherches à faire ne fonctionne pas...

mais on peut ruser... sachant que (j'aime les maths...)
min(x,y)= ((x+y)-abs(x-y))/2
et
max(x,y)= ((x+y)+abs(x-y))/2

donc ce que tu cherches a faire devient (attention les yeux...) avec $Modif=+5 dans ton cas...tu peux le modifier meme par un nombre negatif!
CODE
Update Machin set pourcentage = (100+(pourcentage+$Modif+abs(pourcentage+$Modif))/2-abs(100-(pourcentage+$Modif+abs(pourcentage+$Modif))/2))/2
smartass.gif

Quoi c'est moche???

wink.gif

Edit : J'avais confondu des - et des +...
Edit2 : Y a aussi GREATEST a la place de MAX et LEAST à la place de MIN...lol
sarc
Hum, que dire.. Merci beaucoup Bourinho, tu m'as fait avoir honte avec les formules mathématiques, j'avais complètement zappé...

Mais tout ça pour dire que ça marche pas comme je voudrais...
CITATION
Nombre d'enregistrements affectés : 0 (traitement: 0.0004 sec.)

Il refuse de me modifier les données parfois, même si je rajoute colonne=colonne+1 sur une autre colonne, il traite pas dans certains cas à priori, je sais pas d'où ça peut venir... Je vais donc continuer à fouiller un peu (j'ai testé avec Least et Greatest), et voir pourquoi il me modifie pas systématiquement la ligne !

Je reviens si j'ai du nouveau !

EDIT : j'ai du nouveau, ça marche. Avec les deux méthodes, il n'y a pas de soucis visibles au premier coup d'oeil en tout cas...
C'était tellement brouillon que j'avais fait une petite erreur de syntaxe, au temps pour moi !
Enfin bref encore merci Bourinho pour m'avoir appris Least et Greatest, et aussi pour m'avoir fait réviser mes petites formules mathématiques...
Ceci est une version "bas débit" de notre forum. Pour voir la version complète avec plus d'information, la mise en page et les images, veuillez cliquer ici.