Videos streaming images jeux et buzz
Connexion






Perdu le mot de passe ?

Inscrivez-vous maintenant !
Menu Principal
Communauté




Wiliwilliam
Multi Update en une query (MySql)
 1  #1
La loi c'est moi
Inscrit: 07/04/2012 19:19
Post(s): 30437
Karma: 8863
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
_________________
Signaler

Wiliwilliam
 0  #2
La loi c'est moi
Inscrit: 07/04/2012 19:19
Post(s): 30437
Karma: 8863
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
_________________
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): 30437
Karma: 8863
@Piteur facile celle là 😃

Contribution le : 31/10/2018 08:59
_________________
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): 30437
Karma: 8863
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
_________________
Signaler


 Haut   Précédent   Suivant






Si vous êtes l'auteur d'un élément de ce site, vous pouvez si vous le souhaitez, le modifier ou le supprimer
Merci de me contacter par mail. Déclaré à la CNIL N°1031721.