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 + select avec autoincrement


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 14
    Par défaut insert + select avec autoincrement
    Bonjour

    Voici la structure de ma table =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    CREATE TABLE `paiement` (
      `idPaiement` int(11) NOT NULL,
      `numFacture` int(11) NOT NULL,
      `montant` float NOT NULL,
      `date` varchar(8) NOT NULL,
      `type_paiement` enum('','Chèque','Virement','CB','Liquide','Avoir') NOT NULL,
      `commentaire` varchar(255) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1;
     
      ADD PRIMARY KEY (`idPaiement`);
      MODIFY `idPaiement` int(11) NOT NULL AUTO_INCREMENT;COMMIT;
    Et je ne comprends pas pourquoi cette requête ne fonctionne pas =
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO paiement (idPaiement, numFacture, date, montant, type_paiement, commentaire) select NULL, numFacture ,date, montant, type_paiement, commentaire FROM paiement where numFacture = '1144'
    Ca répond = 0 ligne créée


    Merci de votre aide et très bonne journée

    PlugX

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 136
    Par défaut
    As-tu vérifié que select NULL, numFacture ,date, montant, type_paiement, commentaire FROM paiement where numFacture = '1144' retournait bien des lignes ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre averti
    Inscrit en
    Août 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 14
    Par défaut
    Ah effectivement c'est une approche SUPER constructive ça ... je crois voir de la lumière au bout de ce tunnel ! ...

  4. #4
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    De plus, comme la colonne numfacture est de type integer, il faut supprimer les quotes dans la clause WHERE pour éviter la conversion implicite de type qui compromet l'usage des index (et plombe donc les perfs)

  5. #5
    Membre très actif
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Par défaut
    Le champ date doit être de type date et non varchar
    Nul besoin de spécifier le champ idPaiement dans la requête d'insertion, vu que c'est un auto_increment

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    INSERT INTO paiement (numFacture, date, montant, type_paiement, commentaire) 
    SELECT numFacture ,date, montant, type_paiement, commentaire
    FROM paiement where numFacture = 1144

  6. #6
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 636
    Billets dans le blog
    10
    Par défaut
    Et la colonne montant ne devrait pas être de type float car la partie décimale d'un type float est imprécise, le type float est à réserver pour les très grands nombres qui n'ont pas besoin d'une précision décimale fiable. À remplacer par un type decimal(n,p)

    Et, pour la colonne type_paiement, plutôt que d'utiliser un enum, un FK vers une table de typologie serait préférable

    Comme quoi, il y en a des choses à dire


    Attention : dans une base de données on ne parle pas de "champ" mais de "colonne" ; les "champs" sont les zones de saisie d'un formulaire ou de restitution d'un état

  7. #7
    Membre averti
    Inscrit en
    Août 2009
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Août 2009
    Messages : 14
    Par défaut ok pour vos contribs / résolu
    ( le paiement à dupliquer était cherché sur la colonne numéro de facture au lieu de le chercher par idPaiment )

    ça duplique évidemment très bien

    vos différentes remarques m'ont appris des choses

    je plussoie tout le siteet la communauté developpez

    @+

Discussions similaires

  1. [AC-2010] INSERT SELECT avec union de 2 tables dans une nouvelle table
    Par Nikimizi dans le forum Requêtes et SQL.
    Réponses: 0
    Dernier message: 31/07/2014, 13h51
  2. [MySQL] insert select avec valeur par défautl
    Par omelhor dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/07/2012, 18h26
  3. Insert multiple avec autoincrement
    Par Le gris dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/08/2009, 15h46
  4. Oracle 8 : INSERT SELECT avec NOT IN trop long
    Par davy.g dans le forum Oracle
    Réponses: 6
    Dernier message: 03/07/2007, 11h33
  5. Insert select avec BD distante
    Par romuald07 dans le forum Requêtes
    Réponses: 5
    Dernier message: 22/11/2006, 11h10

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