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

PHP & Base de données Discussion :

Meilleure facon d'insérer des données dont certaines peuvent être en double ?


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 89
    Points : 56
    Points
    56
    Par défaut Meilleure facon d'insérer des données dont certaines peuvent être en double ?
    Bonjour à tous,

    J'ai une question bête concernant la meilleure méthode a employer lorsqu'on insère des données en masse dans une table et qu'on ne souhaite pas créer de doublon si certaines d'entre elles sont déjà présentes dans la table.

    Dois-je d'abord faire une SELECT en PHP pour repérer toutes les données présentes dans ma table puis construire une requête INSERT INTO ensuite afin d'éviter de rerentrer ces données ?

    Ou alors j'utilise simplement une clé "UNIQUE" sur la colonne qui m'intéresse et je fais un INSERT sans me soucier d'envoyer des données qui sont déjà présente puisqu'elle seront automatiquement traité par mon SGBD ?

    Merci pour votre aide sur ce point

  2. #2
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par beninsky
    Ou alors j'utilise simplement une clé "UNIQUE" sur la colonne qui m'intéresse et je fais un INSERT sans me soucier d'envoyer des données qui sont déjà présente puisqu'elle seront automatiquement traité par mon SGBD ?
    Ca me semble une bonne solution.
    Par contre, "sans te soucier", là j'en doute.
    Si, lors de l'insertion en masse (donc boucle je suppose), s'il y a par hasard une tentative de doublon, ça va provoquer une erreur (genre duplicate machin truc).
    Il faudra gérer cette erreur, et non laisser "planter" le script, sinon ça risque de s'arrêter là.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Merci pour ton aide

    En fait je viens de tester et le script marche correctement sans même afficher d'erreur, le seul problème c'est qu'il incrémente les ID de ma table même lorsqu'il ne fait pas d'insertion à cause d'un doublon :S Du coup ma table se retrouve avec des IDs irréguliers.

    Je pense donc que je vais opter pour la solution du SELECT et virer les doublons en PHP avant pour n'insérer que les bons. Je garde la colonne en UNIQUE au cas où.

    Si vous avez une solution pour empêcher MySQL d'incrémenter un ID lors de la détection d'un doublon je suis preneur

    Merci pour votre aide

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    le seul problème c'est qu'il incrémente les ID de ma table même lorsqu'il ne fait pas d'insertion à cause d'un doublon :S Du coup ma table se retrouve avec des IDs irréguliers.
    Je ne pige pas ?
    Comment peut il avoir une incrémentation s'il n'y a pas d'insertion ?

    Veux tu dire que lorsque tu fait une insertion, tu renseigne aussi la valeur de l'auto_incrémente ? (ça y ressemble)
    Si c'est le cas, il ne faudrait pas mettre le valeur de l'auto_increment, mais laisser la Bdd les attribuer. Les IDs devraient être régulier (sans trou).
    Mais il faut voir si c'est souhaitable de le faire, faire gaffe aux autres table liées, essentiellement.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 89
    Points : 56
    Points
    56
    Par défaut
    Merci pour ton aide

    Je ne comprends pas pourquoi les ID sont incrémentés, je vais faire des tests.

    Pour l'instant j'ai opté pour la solution du SELECT et cela fonctionne bien

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Le plus simple serait de mettre du code, du comment tu procède.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

Discussions similaires

  1. [XL-2007] Insérer des données dans un tableau sous certaines conditions
    Par Joeytriviani dans le forum Excel
    Réponses: 2
    Dernier message: 14/04/2015, 15h38
  2. Insérer des données cryptées MD5
    Par Amnesiak dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 09/08/2005, 18h08
  3. Insérer des données Excel dans une base Access ?
    Par MaTHieU_ dans le forum Access
    Réponses: 3
    Dernier message: 22/06/2005, 15h11
  4. [JTable] Insérer des données?
    Par waldo2188 dans le forum Composants
    Réponses: 4
    Dernier message: 29/03/2005, 11h40
  5. Réponses: 6
    Dernier message: 30/06/2004, 08h16

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