Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Administration
Administration Forum d'entraide sur l'administration de MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 16/05/2006, 16h06   #1
Invité de passage
 
Inscription : mai 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 12
Points : 1
Points : 1
Par défaut Probleme D'update

Bonjour la foule,

j'ai un problème de recopie d'un champ d'une table vers une autre (du à la version de mysql 3.23) et je ne sais pas comment transformer ma requête.

Code :
1
2
3
UPDATE table1
LEFT JOIN table2 ON table1.champ=table2.champ
SET table1.designation=table2.designation
J'ai vu qu'il fallait passer par un select mais je ne vois pas comment.

J'ai aussi essayer la syntaxe suivante sans plus de résultat :
Code :
1
2
3
UPDATE table1,table2 
SET table1.designation=table2.designation
WHERE table1.champ=table2.champ
Quelqu'un pour m'aider ?
fabdel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2006, 16h52   #2
Invité de passage
 
Inscription : mai 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 12
Points : 1
Points : 1
pas de réponse
fabdel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2006, 16h56   #3
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
je comprends pas.
tu dis recopier un champ et update sert a faire une mise a jour
précise ce que tu veux faire
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2006, 16h59   #4
Invité de passage
 
Inscription : mai 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 12
Points : 1
Points : 1
J'ai un champ description dans une table, et je souhaite que cette description soit recopier dans l'autre table par recopie.

Il y a un champ pour le lien sur lequel je m'appuie pour faire la jointure.

Ainsi, la description recopiée servira de base dans mon autre table afin que la personne puisse modifier ou completer cette description.

Compris, ou bien je m'exprime mal ?
fabdel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2006, 17h01   #5
Modérateur
 
Avatar de Cybher
 
Homme Michel
Consultant informatique
Inscription : mai 2005
Messages : 3 006
Détails du profil
Informations personnelles :
Nom : Homme Michel
Âge : 29
Localisation : France

Informations professionnelles :
Activité : Consultant informatique
Secteur : Conseil

Informations forums :
Inscription : mai 2005
Messages : 3 006
Points : 4 039
Points : 4 039
un petit exemple ne serait pas de trop. enfin pour moi.
Cybher est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/05/2006, 17h05   #6
Invité de passage
 
Inscription : mai 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 12
Points : 1
Points : 1
Je te recopie les codes avec juste le renommage du champ sur lequel je fais la jointure, mais j'arrive pas trop a être plus explicite

Donc ces 2 syntaxes ne fonctionnent pas étant donné la version trop vieille de mysql.

Je souhaite donc transformer ces requetes afin qu'elle puissent être appréhendées par le moteur :

Code :
1
2
3
UPDATE table1
LEFT JOIN table2 ON table1.reference=table2.reference
SET table1.designation=table2.designation
Code :
1
2
3
UPDATE table1,table2 
SET table1.designation=table2.designation
WHERE table1.reference=table2.reference
Voila
fabdel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 09h46   #7
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
Les updates multi tables ne sont autorisés qu'à partir de la version 4.0.4
Citation:
Starting with MySQL 4.0.4, you can also perform UPDATE operations covering multiple tables. However, you cannot use ORDER BY or LIMIT with a multiple-table UPDATE. The table_references clause lists the tables involved in the join. Its syntax is described in Section 13.2.7.1, “JOIN Syntax”. Here is an example:
UPDATE items,month SET items.price=month.priceWHERE items.id=month.id;
Pour faire ton update , tu dois utiliser une variable ou une table temporaire. Dans ta table temporaire tu insères les bonnes valeurs. tu les effaces dans la table 1 et rajoutes ensuite les valeurs de la table temporaire dans la table 1. Evidemment tu lockes toutes les tables auparavant.
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 10h00   #8
Invité de passage
 
Inscription : mai 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 12
Points : 1
Points : 1
Citation:
Envoyé par Alexandre T
Pour faire ton update , tu dois utiliser une variable ou une table temporaire. Dans ta table temporaire tu insères les bonnes valeurs. tu les effaces dans la table 1 et rajoutes ensuite les valeurs de la table temporaire dans la table 1. Evidemment tu lockes toutes les tables auparavant.
J'ai essayé de mettre des alias dans ma requête mais sans plus de succés
Ou alors je comprends pas bien ce que tu veux dire.
fabdel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 10h13   #9
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
Tu ne comprends pas bien ou je me suis mal exprimé à mon tour.
Tu crées une table temporaire copie vierge de la table1
Code :
CREATE TABLE1_COPIE .....
Tu sélectionnes par un select le résultat final que tu souhaiterais obtenir.
Code :
1
2
3
4
INSERT INTO TABLE1_COPIE 
SELECT table1.reference, table2.designation, table1.champ3,table1.champ4 (...etc...)
FROM TABLE1
INNER JOIN TABLE2 ON TABLE1.reference=TABLE2.reference
Ensuite tu lockes la table 1, pour que personne d'autre n'y touche
Ensuite tu vides la table1
Ensuite tu copies le contenu de table1_copie dans table1
Code :
INSERT INTO TABLE1 SELECT * FROM TABLE1_COPIE
Ensuite tu libères la table
Une sauvegarde préalable serait une bonne idée.

edit : J'ai remplacé truncate table1 par delete table 1 car je crois me souvenir que truncate n'est pas très compatible avec les verrous
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 16h14   #10
Nouveau Membre du Club
 
Inscription : avril 2006
Messages : 68
Détails du profil
Informations forums :
Inscription : avril 2006
Messages : 68
Points : 28
Points : 28
heuuu un peut bidouille casse coup la quand meme...

Citation:
Envoyé par moi dans un autre tread
bonjour,

voila je doit avoir une erreur dans ma syntaxe (pourquoi je dit je doit)
Code :
1
2
3
4
UPDATE TABLE_INFO SET( contact, num_contact)  = (  SELECT contact, num_contact
FROM tampon ) 
WHERE TABLE_INFO.id_tableI = tampon.id_tableT;
sur le net je n'ai pas trouver de methode d'update a partir d'une autre table (pourtant j'aurais dût)
(j'utilise MySQL)
si j'applique cette methode ca vas etre hypert long... ma table_info fait plus d'une 20ène de colones et des miliers de lignes
et j'ai a executer ce scripte assey regulièrement

il doit y avoir un methode plus simple... genre:
Code :
1
2
3
UPDATE TABLE_INFO SET contact= (  SELECT contact FROM tampon ) 
 WHERE TABLE_INFO.id_tableI = tampon.id_tableT;
et
Code :
1
2
3
UPDATE TABLE_INFO SET num_contact= (  SELECT num_contact FROM tampon ) 
 WHERE TABLE_INFO.id_tableI = tampon.id_tableT;
mouai... je crois que je vais plutot fair un script en php pour faire ca...
manshoon est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 16h31   #11
Invité de passage
 
Inscription : mai 2006
Messages : 12
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 12
Points : 1
Points : 1
Citation:
Envoyé par manshoon
mouai... je crois que je vais plutot fair un script en php pour faire ca...
J'ai essayé ta méthode mais elle ne fonctionne pas non plus.

Quant au script en php, le problème c'est que j'arrive sur un timeout du fait du grand nombre d'enregistrements.
fabdel est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/05/2006, 16h54   #12
Membre Expert
 
Avatar de Alexandre T
 
Inscription : mai 2002
Messages : 1 022
Détails du profil
Informations personnelles :
Âge : 35
Localisation : France, Meurthe et Moselle (Lorraine)

Informations forums :
Inscription : mai 2002
Messages : 1 022
Points : 1 123
Points : 1 123
Citation:
Envoyé par manshoon
heuuu un peut bidouille casse coup la quand meme...
Tout à fait. En même temps, rester avec des technologies de MySQL 3.23 ne peut conduire qu'à ce genre de résultat...

A partir de mySQL 4.04 , une requête et c'est fini.
Code :
1
2
3
UPDATE [LOW_PRIORITY] [IGNORE] tbl_name [, tbl_name ...]    
SET col_name1=expr1 [, col_name2=expr2 ...]   
 [WHERE where_definition]
soit

Code :
1
2
3
4
UPDATE TABLE_INFO, tampon 
SET TABLE_INFO.num_contact= tampon.num_contact  
 WHERE TABLE_INFO.id_tableI = tampon.id_tableT;
__________________
Alexandre T.

PHP5/MySQL5 Codes prêts à l'emploi
30 projets avec codes sources complets pour créer diaporamas photos, chat, arbre généalogique, statistiques de visites, création de graphiques, moteur de recherche, Sudoku etc...

Mes articles
Alexandre T est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h16.


 
 
 
 
Partenaires

Hébergement Web