[RESOLU] corriger sur une DB une fois pour toute

Eléphant du PHP | 187 Messages

20 janv. 2012, 18:40

bonjour,
j'ai un petit souci dont j'espère que vous vous m'aider à trouver une solution..
alors j'ai rempli une table :personnes(nom,prénom..),Et sur une table :affectation j'ai enregistré des centaines d'affectation avec les nom&prénom des personnes importé de la table personnes.
Après,j'ai trouvé que tout le contenu des champ noms était manquant(vu que size c'était pas suffisant au début)Donc j'ai commencé à compléter nom par nom dans chaque enregistrement.. une opération qui était pas vraiment belle :/
Maintenant quand j'ai visualiser les affectations j'ai trouvé les anciens noms donc ma correction a eté limité sur la principale table qui est personne,maintennat je veux savoir si il y a une méthode pour corriger les noms qui sont sur la table affectatin sachant qu'il y u un id commun entre les deux tables!! :/
si quelqu'un à une solution facile merci infiniment de le partager .

ViPHP
ViPHP | 1996 Messages

20 janv. 2012, 19:06

Pas testé :

UPDATE personne SET personne.nom = affectation.nom WHERE personne.id = affectation.id
It is nice to be important but it is more important to be nice
http://www.aureuswebfactory.fr

Eléphant du PHP | 187 Messages

21 janv. 2012, 12:19

Oui exacte!ça marché avec :
update table2 set nom=(select nom from table1 where table1.id=table2.id)
merci

Eléphant du PHP | 187 Messages

23 janv. 2012, 13:29

Désolé pour le Re mais j'ai pas fais attention à un problème.^^
dans ma table1 j'ai le champs nom+prénom+id
dans la table2 j'ai un seul champs qui concatène ces 3 champs qui s'appelle nom.
donc quand j'ai exécuté la requête:
update table2 set nom=(select nom from table1 where table2 .id=table1 .id)
il m'a remplacé tout le contenue que j'avais (exemple: tito toto (id) ) par tito donc que dois-je ajouté en mon cas y a comment concatène les 3 champs selon id après faire l'update sur SQL ??

Merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 janv. 2012, 16:15

Tu peux utiliser la fonction concat() de MySQL pour concaténer plusieurs valeurs (chaines ou colonnes) :
SELECT CONCAT('My', 'S', 'QL');
        -> 'MySQL'
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 187 Messages

23 janv. 2012, 16:34

Merci pour votre réponse,alors j'ai essayé un truc comme ça:
update table2 set nom = ( SELECT CONCAT('nom', 'prenom', 'id')  FROM table1 where table2 .id = table1.id)
Alors il me rends pas les valeurs des champs mais ça : nomprenomid :?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 janv. 2012, 20:51

Entre apostrophes c'est une chaine :) :
- 'nom', c'est la chaine
- nom, c'est la colonne (et donc la valeur quand tu fais un select)
 SELECT CONCAT('nom', 'prenom', 'id')
        -> nomprenomid
 SELECT CONCAT(nom, prenom, id)
        -> BonbeurJean42
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 187 Messages

26 janv. 2012, 17:19

oui je sais c'est pour te montrer que c'est des valeurs non ds chaines :s

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

02 févr. 2012, 22:41

Ben si tu fais
UPDATE table2 SET nom = ( SELECT CONCAT('nom', 'prenom', 'id')  FROM table1 WHERE table2 .id = table1.id)
MySQL concatène la chaine 'nom' avec la chaine 'prenom' et la chaine 'id', ce qui donne la chaine 'nomprenomid' qui est alors enregistrée dans ta colonne nom.

Si tu enlèves les apostrophes autours des noms de colonnes, MySQL utilisera les valeurs qu'il trouve dans la table ;)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...