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 :

Insertion avec condition


Sujet :

Requêtes MySQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Insertion avec condition
    Bonjour à tous,
    Je désirerais effectuer l'insertion d'un valeur dans une colonne d'une table à condition que la valeur concernée n'existe pas déjà.
    La colonne concernée par l'insertion n'est pas une colonne index.
    En clair, j'espère... peut on générer une requête du type :

    Merci par avance

  2. #2
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Citation Envoyé par cassou@laposte
    Bonjour à tous,
    Je désirerais effectuer l'insertion d'un valeur dans une colonne d'une table à condition que la valeur concernée n'existe pas déjà.
    C'est le principe même de la commande INSERT

    Citation Envoyé par cassou@laposte
    Mais là, tu veux l'inverse ....
    Citation Envoyé par cassou@laposte
    La colonne concernée par l'insertion n'est pas une colonne index.
    Enfin, on insère pas 1 colonne, mais une ligne...
    Si tu souhaites agir sur 1 colonne, c'est la commande UPDATE qu'il faut invoquer.

    Bref, peux-tu préciser ton besoin ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut Insertion avec condition
    Ok, je ne parle pas couramment le SQL (nul n'est parfait) alors je vais essayer de traduire cela par l'exemple.
    Une table tbAgenda dispose de 3 colonnes id, nom et téléphone. Je désirerai insérer une nouvelle ligne dans cette table, seulement si le numéro de téléphone n'est pas déjà présent (même si le nom est différent).
    id est Primary index auto incrément et nom est un index de la table.

    Pauvre exemple mais j'espère qu'il est suffisant.

    Ma question est de savoir si il est possible en une seule de requête d'effectuer cette insertion.

  4. #4
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 925
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 925
    Points : 6 040
    Points
    6 040
    Par défaut
    Alors, regarde si la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    REPLACE [LOW_PRIORITY | DELAYED]
        [INTO] tbl_name [(col_name,...)]
        SELECT ...
    peut t'aider

    tu pourrais faire la comparaison <champ_vide> dans le select ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 284
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 284
    Points : 11 739
    Points
    11 739
    Par défaut
    Dans tous les cas, il suffit que tu crées un index unique (ou une clé primaire) sur la colonne Téléphone. Ensuite, tu fais ta requête différemment selon le comportement que tu souhaites en cas de doublon :

    - si tu veux que l'insertion soit purement et simplement refusée, tu fais ton INSERT normal, et tu laisses l'erreur se produire

    - si tu veux que tes nouvelles données remplacent complètement les anciennes, tu utilises REPLACE INTO (qui est l'équivalent d'un DELETE suivi d'un INSERT)

    - si l'arbitrage entre anciennes et nouvelles données est plus complexe, par exemple par que tu veux éviter qu'un NULL n'écrase une donnée, tu utilises INSERT... ON DUPLICATE KEY UPDATE :

    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    $tel = "'0123456789'" ;
    $nom ="'toto'" ;
    $adr = "NULL" ;
     
    $sql = "
      INSERT INTO ta_table (Telephone, Nom, Adresse) 
      VALUES ($tel, $nom, $adr)
      ON DUPLICATE KEY UPDATE Nom = COALESCE($nom, Nom), Adresse = COALESCE($adr, Adresse) ;
    " ;

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Merci à tous les 2 pour toutes ces explications, je vais essayer cela tout de suite.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10
    Points : 5
    Points
    5
    Par défaut
    Cela fonctionne, en ajoutant un index sur la colonne Téléphone et en gérant l'erreur dans le cas de doublons. C'est la méthode qui est la plus conforme à mon besoin.
    J'ai tout de même testé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ON DUPLICATE KEY UPDATE
    et la méthode qui me seront utiles plus tard et cela fonctionne bien aussi.
    Merci encore, à tous les deux.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/08/2012, 10h28
  2. Requête d'insertion avec condition
    Par cendrine15 dans le forum Langage SQL
    Réponses: 5
    Dernier message: 19/04/2012, 20h54
  3. Insertion avec condition d'existence
    Par Alvaten dans le forum Langage SQL
    Réponses: 8
    Dernier message: 09/05/2011, 16h59
  4. Update or insert avec conditions sur les champs
    Par calou_33 dans le forum SQL
    Réponses: 7
    Dernier message: 04/08/2010, 10h36
  5. INSERT avec condition d'une table à une autre
    Par papipasto dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/03/2006, 13h51

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