Wiliwilliam | Multi Update en une query (MySql) |
1 #1 |
---|---|---|
La loi c'est moi
Inscrit: 07/04/2012 19:19
Post(s): 38229
Karma: 18971 |
Vous commencez à être habitués à mes questions farfelues en php/mysql
Ce coup ci, j'essaie de faire en une seule query un update de plusieurs lignes mais pas de la même valeur. exemple con: j'ai les colonnes NOM et PROUTE NOM: le nom de la personne PROUT: le total de proutes qu'il a fait (oui je suis subtil dans mes exemples) et j'ai 3 lignes martin | 10 jean | 10 Youssouf | 10 Je souhaite en une requête faire l'update suivant: rajouter +5 au total de proutes de martin, +2 à jean et -3 à Youssouf. J'ai tenté un truc de ce genre: UPDATE proute_table SET prout where CASE WHEN(NAME = "martin") THEN prout=prout+5 WHEN (NAME = "jean") THEN prout=prout+2 WHEN (NAME = "Youssouf") THEN prout=prout-3 Sans succès bien évidemment :S (j'y croyais pas de toute façon) Y a t il une solution ou bien je dois update par ligne? (s'pas un soucis, mais je dois savoir pour avancer)
Contribution le : 30/10/2018 14:41
|
|
_________________
>> Récompenses si tu passes en article << |
||
Signaler |
Wiliwilliam | 0 #2 |
|
---|---|---|
La loi c'est moi
Inscrit: 07/04/2012 19:19
Post(s): 38229
Karma: 18971 |
Ok j'ai trouvé une solution:
UPDATE proute_table SET PROUTE = CASE WHEN NAME = 1 THEN PROUTE+5 WHEN NAME= 2 THEN PROUTE+2 WHEN NAME = 3 THEN PROUTE-3 ELSE PROUTE END WHERE id in (1,2,3) (1,2 et 3 les noms des trois péteux) Je laisse le topic ouvert si vous avez des solutions de meilleures qualités.
Contribution le : 30/10/2018 14:45
|
|
_________________
>> Récompenses si tu passes en article << |
||
Signaler |
Invité | 1 #3 |
|
---|---|---|
FantômeInvité
|
Je suis obligé de commenter....
Ca paraît foireux cette histoire...
Contribution le : 30/10/2018 23:58
Edité par Piteur sur 31/10/2018 10:40:06
|
|
Signaler |
Wiliwilliam | 0 #4 |
|
---|---|---|
La loi c'est moi
Inscrit: 07/04/2012 19:19
Post(s): 38229
Karma: 18971 |
@Piteur facile celle là
Contribution le : 31/10/2018 08:59
|
|
_________________
>> Récompenses si tu passes en article << |
||
Signaler |
Invité | 0 #5 |
|
---|---|---|
FantômeInvité
|
Plus sérieusement des soucis à venir sur le long-terme non ? Dans la construction de la requête avec le mapping ID / valeur à update à pas merder dans la création de la requête. Et coté transaction tu perds l'avantage des commits / rollback avec cet update massif non ? Après, j'en sais rien de ton contexte ^^
Contribution le : 31/10/2018 10:41
|
|
Signaler |
Wiliwilliam | 1 #6 |
|
---|---|---|
La loi c'est moi
Inscrit: 07/04/2012 19:19
Post(s): 38229
Karma: 18971 |
En fait l'update aura au grand max 5 "Cases" avec 1 ligne à update par "Case", donc 5 items max dans le "IN()".
L'update n'évoluera ni en terme de complexité ni en poids. Il y a - de 100 lignes dans cette table, et ça ne bougera pas non plus.
Contribution le : 31/10/2018 14:51
|
|
_________________
>> Récompenses si tu passes en article << |
||
Signaler |