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 :

Insert Into .... On Duplicate. Comment faire ?


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Insert Into .... On Duplicate. Comment faire ?
    Salut,


    Voila je charge une table de ma BDD MySQL avec un fichier CSV.
    Ce fichier CSV peut etre remis a jour de temps a autre et recharger dans ma BDD.

    J'aimerais ke kan je charge mon CSV via un INSERT INTO k'il puisse ecraser une ligne déjà existante s'il rencontre un $id_dossier déjà existant.

    Pour l'instant s'il rencontre un $id_dossier deja existant il n'ecrase pas la ligne car le champ id_dossier de ma BDD est un champ primaire MEDIUMINT.

    J'ai cru comprendre ke je pourrais faire ça avec la clause ON DUPLICATE KET mais je ne sais pas comment parametrer cette clause.

    Please Help, merci


    Ma requete :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ajout = mysql_query("INSERT INTO objet_auto VALUES ('$id_dossier','$vente','$ordre_vente','$genre','$marque')");

  2. #2
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Y'a vraiment personne pour me donner un conseil sur la manière d'agir concernat le Duplicate key ?

  3. #3
    slc
    slc est déconnecté
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 36
    Points : 37
    Points
    37
    Par défaut
    Salut,
    je connais pas cette clause.
    Une autre solution est de chargé ton fichier dans une table temporaire puis a partir de cetet table temporaire :
    - faire un update pour les id existant dans ta table
    - faire un ajout pour ceux qui n'y sont
    - eventuellement supprimer ceux qui n'existe plus dans ta table temporaire.
    Cas a priori non prise en compte avec la clause on duplicate.

  4. #4
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    Oula ta methode semble un peu complexe pour ma pauvre competence en SQL

    Pour infos sur la condition ON DUPLICATE KEY de la clause INSERT INTO

    Si vous spécifiez la clause ON DUPLICATE KEY UPDATE (nouveau en MySQL 4.1.0), et qu'une ligne insérée engendre un doublon pour une clé PRIMARY ou UNIQUE , une commande UPDATE sera faite à la place de l'insertion. Par exemple, les commandes ont le même effet :

    mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=c+1; mysql> UPDATE table SET c=c+1 WHERE a=1;

    Note : si la colonne b est aussi unique, la commande UPDATE sera réécrite telle que
    mysql> UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1;

    Si a=1 OR b=2 trouve plusieurs lignes, uniquement une ligne sera mise à jour! En général, il faut éviter d'utiliser la clause ON DUPLICATE KEY sur des tables avec des clés UNIQUE multiples.Depuis MySQL version 4.1.1, on peut utiliser la fonction VALUES(col_name) pour faire référence à la valeur de la colonne dans la clause INSERT d'une commande INSERT ... UPDATE : c'est la valeur qui serat inserée s'il n'y a pas de conflit de clé. Cette valeur est particulièrement utilise dans les commandes INSERT ... UPDATE et retourne NULL sinon.
    Exemple :

    mysql> INSERT INTO table (a,b,c) VALUES (1,2,3),(4,5,6) -> ON DUPLICATE KEY UPDATE c=VALUES(a)+VALUES(b);

    La commande ci-dessus est identique à :
    mysql> INSERT INTO table (a,b,c) VALUES (1,2,3) -> ON DUPLICATE KEY UPDATE c=3;mysql> INSERT INTO table (a,b,c) VALUES (4,5,6) -> ON DUPLICATE KEY UPDATE c=9;



    J'ai bien lu les conseils ci dessus mais j'ai rien compris ??

  5. #5
    slc
    slc est déconnecté
    Nouveau membre du Club
    Inscrit en
    Février 2003
    Messages
    36
    Détails du profil
    Informations forums :
    Inscription : Février 2003
    Messages : 36
    Points : 37
    Points
    37
    Par défaut
    essaye ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    INSERT INTO objet_auto VALUES ('$id_dossier','$vente','$ordre_vente','$genre','$marque')
    on duplicate key update 
    vente ='$vente',
    ordre_vente = '$ordre_vente',
    genre = '$genre',
    marque = '$marque'
    en considerant que les champs de ta table sont id_dossier, vente, ordre_vente, genre, marque.

    Verifie aussi que seul ton champ id_dossier et unique.

    Je ne sait pas si ca marche, je testerai cette fonction ce soir.

  6. #6
    Futur Membre du Club
    Inscrit en
    Janvier 2005
    Messages
    12
    Détails du profil
    Informations forums :
    Inscription : Janvier 2005
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    ok merci

    j'en etais arrivé tester exactement la même requete (ki doit etre correcte normalement) mais ça marchais pas et en fait je me suis rendu compte ke le ON DUPLICATE KEY ne fonctionne ka partir de MySQL 4.1.0....

    et bien evidemment mon hebergeur tourne sur une version 3


    Donc je vais faire autrement


    Merci en tout cas

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

Discussions similaires

  1. insertion de plusieurs lignes, comment faire ?
    Par RR instinct dans le forum SQL
    Réponses: 6
    Dernier message: 23/01/2007, 09h40
  2. Comment faire des inserts massivement et rapidement ?
    Par JYves dans le forum Décisions SGBD
    Réponses: 5
    Dernier message: 09/08/2006, 10h57
  3. Insert Into .. On Duplicate (complexe)
    Par c4l3m dans le forum Requêtes
    Réponses: 2
    Dernier message: 29/06/2006, 06h12
  4. Comment faire une insertion dans un fichier texte ?
    Par Isa31 dans le forum Langage
    Réponses: 10
    Dernier message: 28/12/2004, 09h06

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