IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

PB de doublons avec ON DUPLICATE KEY UPDATE


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut PB de doublons avec ON DUPLICATE KEY UPDATE
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $strSQL = $sql = "INSERT INTO racingw_inscrip.recup_pseudo_forum (user_id, username, user_email)
    (SELECT racingw_forum.php3_users.user_id, racingw_forum.php3_users.username, racingw_forum.php3_users.user_email
    FROM racingw_forum.php3_users) 
    ON DUPLICATE KEY UPDATE
    racingw_inscrip.recup_pseudo_forum.user_id = racingw_forum.php3_users.user_id";
    $resultat = requete_SQL($strSQL);

    Merci d'avance
    Audrey

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Hé bien tout dépend de ce qui est déclaré comme PRIMARY KEY dans la table racingw_inscrip.recup_pseudo_forum.

  3. #3
    Candidat au Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    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

  4. #4
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    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.

  5. #5
    Candidat au Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $strSQL = $sql = "INSERT INTO racingw_inscrip.recup_pseudo_forum (user_id, username, user_email) 
    (SELECT racingw_forum.php3_users.user_id, racingw_forum.php3_users.username, racingw_forum.php3_users.user_email 
    FROM racingw_forum.php3_users) 
    ON DUPLICATE KEY UPDATE
    racingw_inscrip.recup_pseudo_forum.user_id = racingw_forum.php3_users.user_id, 
    racingw_inscrip.recup_pseudo_forum.username = racingw_forum.php3_users.username, 
    racingw_inscrip.recup_pseudo_forum.user_email = racingw_forum.php3_users.user_email";
    $resultat = requete_SQL($strSQL);

    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 ?

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    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.

  7. #7
    Candidat au Club
    Femme Profil pro
    Webmaster
    Inscrit en
    Mai 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mai 2011
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    ç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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ON DUPLICATE KEY UPDATE
    racingw_inscrip.recup_pseudo_forum.username = racingw_forum.php3_users.username,
    racingw_inscrip.recup_pseudo_forum.user_email = racingw_forum.php3_users.user_email
    et ça marche tout bien
    merci beaucoup

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insert ou Update probleme avec on duplicate key
    Par orphen dans le forum MySQL
    Réponses: 2
    Dernier message: 16/10/2010, 11h42
  2. INSERT .. ON DUPLICATE KEY UPDATE fait que des INSERT !
    Par umeboshi dans le forum Requêtes
    Réponses: 2
    Dernier message: 30/07/2008, 09h40
  3. Syntaxe ON DUPLICATE KEY UPDATE
    Par JoN28fr dans le forum Requêtes
    Réponses: 7
    Dernier message: 27/02/2008, 09h32
  4. ON DUPLICATE KEY UPDATE et unicité sur 2 colonnes
    Par dja07 dans le forum SQL Procédural
    Réponses: 8
    Dernier message: 07/06/2007, 16h54
  5. INSERT ... ON DUPLICATE KEY UPDATE
    Par luffy san dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 17/10/2005, 17h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo