Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
916 connectés 

  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL] UPDATE multiple sur une table [Résolu]

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[MYSQL] UPDATE multiple sur une table [Résolu]

n°689232
T509
$job->GetJob(now)
Posté le 01-04-2004 à 00:55:36  profilanswer
 

Salut
 
Est il possible de faire une mise à jour multiple d'une table en 1 seule requete ?
 
j'explique
 
j'ai une liste de couples val1/val2, il y en a près de 45000.
 
je souhaite faire un  
 
UPDATE table SET colonne2 = val2 WHERE colonne1 = val1 ;
 
Soit je fait une boucle qui fait 45000 requetes sur la base (pas glop), soit je prépare une seule requete qui fait tout
 
J'ai pensé à  
UPDATE table SET colonne2 = val2-1, colonne2 = val2-2, ... WHERE colonne1 = val1-1,  colonne1 = val1-2, ...;
 
savez vous comment faire car ma table fait plus de 300000 enregistrements.
 
Merci


Message édité par T509 le 01-04-2004 à 15:29:19

---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
mood
Publicité
Posté le 01-04-2004 à 00:55:36  profilanswer
 

n°689244
jagstang
Pa Capona ಠ_ಠ
Posté le 01-04-2004 à 01:33:54  profilanswer
 

moi je vote pour la boucle. sinon imagine la taille de la requête...

n°689247
T509
$job->GetJob(now)
Posté le 01-04-2004 à 01:38:29  profilanswer
 

C'est bien là le souci, je ne suis pas sûr de pouvoir faire cela dans les 30s authorisées.
 
Si oui, le nombre de hits sur la base est enorme !


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
n°689251
jagstang
Pa Capona ಠ_ಠ
Posté le 01-04-2004 à 01:59:56  profilanswer
 

30 sec. t'as pas parlé de web. Mais d'un autre côté, si ce genre de traitement est "normal" (courant), il faudrait revoir la structure de données...
 
Au pire tu peux modifier le timeout ou bidouiller. je pense pas que tu fais ce genre de traitement tous les jours


Message édité par jagstang le 01-04-2004 à 02:00:10
n°689255
T509
$job->GetJob(now)
Posté le 01-04-2004 à 02:20:40  profilanswer
 

non effectivement, pas tous les jours, c'est pas le souci de bidouiller, mais autant apprendre et se poser les bonnes questions


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
n°689301
ratibus
Posté le 01-04-2004 à 08:36:33  profilanswer
 

T'as essayé de bencher si tu fais la boucle (fais gaffe à ce que colonne1 soit indexé) ?

n°689376
mrbebert
Posté le 01-04-2004 à 10:16:46  profilanswer
 

Si ta liste de couples est elle-même dans une table, tu peux le faire en recopiant dans une nouvelle table tout le contenu de l'ancienne, avec la colonne mise à jour par une jointure :
 
INSERT INTO table_new(colonne2, colonne1, autre_champ1, autre_champ2)
SELECT IFNULL(convert.val2, 0), colonne1, table_old.autre_champ1, table_old.autre_champ2
FROM table_old
LEFT JOIN convert ON table_old.colonne1=convert.val1
 
Le IFNULL permet de fixer la valeur 0 s'il n'y a pas de valeur correspondante dans convert pour une ligne de table_old :)  
 
L'intérêt de cette méthode dépend de la taille de tes tables [:proy]


Message édité par mrbebert le 01-04-2004 à 10:17:26
n°689479
T509
$job->GetJob(now)
Posté le 01-04-2004 à 11:39:51  profilanswer
 

Donc là tu m'expliques que je travailles sur 3 tables :  
table_old (colon1, colon2, colon3, colon4)
table_new (colon1, colon2, colon3, colon4)
convert (val1, val2)
 
et que la requête ci dessus va remplir table_new avec
(colon1, IF(table_old.colon1=convert.val1 alors convert.val2 sinon table_old.colon2), colon3, colon4)
 
Je vais voir essayer ceci
Merci


Message édité par T509 le 01-04-2004 à 11:41:10

---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !
n°689600
mrbebert
Posté le 01-04-2004 à 12:49:28  profilanswer
 

Il y a une nouvelle table (le résultat en quelque sorte), qui est chargée avec le résultat d'une jointure entre la table d'origine et la table de conversion :)

n°689844
T509
$job->GetJob(now)
Posté le 01-04-2004 à 15:29:04  profilanswer
 

Merci !!


---------------
fermez vos topics résolus avec le tag [Résolu] en fin de titre. Merci !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  SQL/NoSQL

  [MYSQL] UPDATE multiple sur une table [Résolu]

 

Sujets relatifs
Probléme avec une requête PHP/MySQL[Mysql][PHP] j'arrive pas à insérer un select
[PHP] test de script sur les adresses IP svp [résolu]affichage champ d'une table
[MySQL] [Applet] comment fournir le mysql-jdbc.jar au client (résolu)[MySQL] Récupérer les valeurs associées à un max() dans un group by
[vba] jointure multipleConnexion qui délire entre mon appli Java et MySql
connection tomcat/mysql 
Plus de sujets relatifs à : [MYSQL] UPDATE multiple sur une table [Résolu]


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR