|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() audrey Webmaster Inscription : mai 2011 Messages : 4 ![]() |
Bonjour,
alors voilà, j'ai 2 tables qui se trouvent dans 2 bases différentes. La 1ere table contient un certains nombres de champs, dont 3 que je veux recopier dans la seconde table qui elle est prévue juste pour ces 3 champs. Comme je veux que la seconde table puisse être mise à jour selon les entrées de la 1ere, j'en suis arrivée à la requête ci-dessous (après une longue prise de tête). Le hic c'est que au lieu d'écraser les anciennes valeurs avec les nouvelles, les lignes sont répétées (les nouvelles lignes contiennent quand même les nouvelles données, oufff j'ai pas tout perdu), il y'a environ 1400 enregistrements, si à chaque passage j'en rajoute autant ça va vite être énorme et surtout n'importe quoi. Bref je pense que j'ai fais une erreur ou omis quelque chose dans ma requête, mais quoi ??? si quelqu'un avait une idée, une solution, un zorro des requêtes... Code php :
Merci d'avance Audrey |
||
|
|
00
|
|
|
#2 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Saluton,
Hé bien tout dépend de ce qui est déclaré comme PRIMARY KEY dans la table racingw_inscrip.recup_pseudo_forum.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#3 |
|
Invité de passage
![]() audrey Webmaster Inscription : mai 2011 Messages : 4 ![]() |
j'ai mis une clé primaire sur user_id de la table racingw_inscrip.recup_pseudo_forum,
d’ailleurs j'ai aussi essayé de mettre unique sur ce même champ, dans ce cas je n'avais plus de doublons, mais plus de mise à jour non plus |
|
|
00
|
|
|
#4 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
Si user_id est PRIMARY KEY la clause ON DUPLICATE KEY tenterait de violer cette contrainte, ce qui n'est pas souhaitable et, normalement, pas possible.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#5 | ||
|
Invité de passage
![]() audrey Webmaster Inscription : mai 2011 Messages : 4 ![]() |
j'ai essayé une nouvelle idée qui me paraissait un peu farfelue mais bon ... à ce stade je tente tout ce qui me passe par la tête.
j'ai donc modifié ma table pour mettre UNIQUE sur le champ user_id au lieu de PRIMARY KEY j'ai également modifié ma requête: Code php :
du coup là ça fonctionne bien comme je veux, les nouvelles entrées sont insérées, les anciennes mises à jour, par contre je me demande si c'est bien joli, joli de mettre UNIQUE sans le PRIMARY KEY (je suis novice et dans ma petite tête il était impératif que le PRIMARY KEY soit sur l'identifiant), non ? |
||
|
|
00
|
|
|
#6 |
|
Expert Confirmé
![]() ![]() Avcxjo MoKoRetraité Inscription : novembre 2005 Messages : 2 530 ![]() |
En fait, PRIMARY KEY est nécessaire et suffisant.
La clause ON DUPLICATE KEY UPDATE n'a pas à s'occuper de la colonne PRIMARY KEY mais uniquement de ce qui doit être fait pour les autres colonnes.
__________________
Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof articles : Comment émuler un tableau croisé [quasi] dynamique et : Une énigme mathématique résolue avec MySQL recommande l'utilisation de PDO (PHP5 Data Objects) |
|
00
|
|
|
#7 | ||
|
Invité de passage
![]() audrey Webmaster Inscription : mai 2011 Messages : 4 ![]() |
ça y est j'y suis !!!!
![]() je viens de comprendre, en fait dans ma requête au départ j'avais mis la clause on duplicate sur le champ qui avait la clé primaire j'ai donc remodifié tout ça en mettant la clé primaire sur le champ user_id et dans la requête je précise à on duplicate d'agir sur les 2 autre champs Code :
merci beaucoup |
||
|
|
00
|
Copyright © 2000-2012 - www.developpez.com