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 :

Récupérer l'id créer lorsd d'une requette insert into


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut Récupérer l'id créer lorsd d'une requette insert into
    Salut a tous,

    en fait je créer avec un formulaire 2 requette associé sur 2 tableaux différents. Donc pour la deuxieme table j'ai besoin de récupérer l'id créé lors de la premiere requette.

    Est ce possible directement a partir de la requette? Je veut éviter de faire une requette SELECT entre mes 2 requettes INSERT INYO?

    Genre il faudrait un truc INSERT INTO .... et qu'en meme temps renvoie la valeur de l'id créé.

    Possible?

  2. #2
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut Re: Récupérer l'id créer lorsd d'une requette insert into
    LAST_INSERT_ID()

  3. #3
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Merci .

    Mais puis-je intégrer LAST_INSERT_id dans une requette INSERT INTO? et comme ca récupérer l'id avec cette unique requette?

  4. #4
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Oui, c'est d'ailleurs à ça que ça sert !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO table1 .... ;
     
    INSERT INTO table2 (ref_table1, ...)
    VALUES (LAST_INSERT_ID(), ... ) ;
    I Par contre, il vaut mieux mettre ces 2 requêtes dans une même transaction: question de synchronisation (pour éviter que 2 processus insèrent en même temps dans table1)

  5. #5
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    ok je vias essayer avec ca.

  6. #6
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Je vois pas trop comment l'écrir en fait.

    j'ai essayé avec ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $sql="INSERT INTO `forumtopic` (`Titre` , `Auteur` , `Sousforum`) VALUES ('$titre' , '$posteur' , '$sousforum'); INSERT INTO `forumreponse` (`id`) VALUES ('LAST_INSERT_ID()')";

  7. #7
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    LAST_INSERT_ID() est une fonction, donc pas de guillemets:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO forumreponse(id) 
    VALUES ( LAST_INSERT_ID() ) ;
    Aussi, mysql_query est incapable d'exécuter plusieurs requêtes séparées pas des ";". Tu dois faire plusieurs appels à cette fonction.

  8. #8
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    j'ai essayer aussi sans mais ca ne marche pas non plus .

    Ca me renvoie cette erreur:

    MySQL a réponduocumentation
    #1062 - Duplicata du champ '2' pour la clef 1

    Notice: Undefined offset: 1 in d:\easyphp1-8\phpmyadmin\libraries\common.lib.php on line 681

    Notice: Undefined offset: 1 in d:\easyphp1-8\phpmyadmin\libraries\common.lib.php on line 685

    Warning: mysql_result(): supplied argument is not a valid MySQL result resource in d:\easyphp1-8\phpmyadmin\libraries\common.lib.php on line 685
    J'ai un cahmp id dans mes 2 tables ca viens peut etre de la ?

  9. #9
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    En fait, j'ai même pas fait gaffe à ce que faisait ton script... (désolé, je fatigue!)

    La fonction LAST_INSERT_ID() te permet de connaitre l'id du dernier enregistrement inséré. Cela sert donc à faire une référence (clef étrangère) sur cet enregistrement.

    Dans ton cas, tu as des "forumtopic" et dans ces topics, tu insères une réponse ("forumreponse"). Donc dans ta réponse, tu doit avoir une clef étrangère sur le topic auquel elle appartient. C'est pour renseigner cette donnée que tu utilises LAST_INSERT_ID(). Comme ton champ id est AUTO_INCREMENTE, tu ne renseignes pas cette donnée.

    En gros, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    INSERT INTO forumtopic (Titre, Auteur, Sousforum)
    VALUES ('$titre' , '$posteur' , '$sousforum') ;
     
    INSERT INTO forumreponse(topic_id, ...)
    VALUES (LAST_INSERT_ID(), ...) ;
    Tu as compris?

  10. #10
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    non :/

    J'ai un champ id dans forumtopic et dans forumreponse. Mais j'ai pas bien compris ton explication .

    Peut-tu préciser s'il te plait? (ou donner un exemple).

  11. #11
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Un exemple de quoi? De clef étrangère?

    Moi ça me semblait assez parlant comme exemple (relis bien)

    En gros:
    - tu insères un enregitrement
    - tu veux insérer un autre enregistrement (probablement dans une autre table) avec une référence sur l'enregistrement précédent, donc tu utilises un LAST_INSERT_ID()

    Voilà, c'est tout !

    ***
    Maintenant, si c'est pas pour des histoires de clef primaires/clef étrangère, alors c'est que j'ai pas compris le pb.

    Si c'est pour récupérer l'id du topic après insertion, tu fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    INSERT INTO forumtopic (Titre, Auteur, Sousforum)
    VALUES ('$titre' , '$posteur' , '$sousforum') ; 
     
    SELECT LAST_INSERT_ID() ;
    Si tu fais un mysql_query() sur avec une requête INSERT, il te renverra juste vrai ou faux (j'ai vérifié dans la doc PHP) et non pas l'id du dernier enregistrement inséré (donc tu es obligé de faire un SELECT)

  12. #12
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Salut, encors merci.

    J'ai essayer cette requette dans le SQL de phpmyadmin et ca marche nickel.

    Mais je vois pas comment la récupérer en php.

    J'ai essayer ca mais ca me renvoie une erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $sql="INSERT INTO `forumtopic` (`Titre` , `Auteur` , `Sousforum`) VALUES ('$titre' , '$posteur' , '$sousforum'); SELECT LAST_INSERT_ID()";
     
    							$req=mysql_query($sql);
    							$res=mysql_fetch_row($req);
    							$idtopic=$res[0];

  13. #13
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    J'ai déjà répondu à cette question:
    Citation Envoyé par pcaboche
    Aussi, mysql_query est incapable d'exécuter plusieurs requêtes séparées pas des ";". Tu dois faire plusieurs appels à cette fonction.

  14. #14
    Membre éclairé Avatar de Death83
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 667
    Points : 878
    Points
    878
    Par défaut
    Comment ca?

    Je dois séparer les requette?
    Si c'est le cas ca risque de mélanger certain topic si 2 personnes poste en meme temps.

  15. #15
    Rédacteur
    Avatar de pcaboche
    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    2 785
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Singapour

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 785
    Points : 9 716
    Points
    9 716
    Par défaut
    Ben oui mais comment veux-tu faire autrement?

    Citation Envoyé par pcaboche
    Si tu fais un mysql_query() sur avec une requête INSERT, il te renverra juste vrai ou faux (j'ai vérifié dans la doc PHP) et non pas l'id du dernier enregistrement inséré (donc tu es obligé de faire un SELECT)
    Le mieux c'est de mettre un verrou sur la table: 7.3.1. Méthodes de verrouillage

  16. #16
    Membre émérite Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Points : 2 973
    Points
    2 973
    Par défaut
    Citation Envoyé par Death83
    Comment ca?

    Je dois séparer les requette?
    Si c'est le cas ca risque de mélanger certain topic si 2 personnes poste en meme temps.
    Non, LAST_INSERT_ID() est spécifique à la connexion, il n'y a donc aucun danger qu'une autre insertion vienne interférer.

Discussions similaires

  1. [Débutant] Passer les Paramètres à une requette "Select into "
    Par sidisadmir dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/10/2013, 09h44
  2. Réponses: 1
    Dernier message: 07/12/2010, 10h57
  3. Réponses: 5
    Dernier message: 23/06/2006, 15h04
  4. petite aide sur une requete INSERT INTO
    Par bonneti dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/03/2005, 15h17
  5. Erreur lors d'une requete insert into.. select
    Par Mr N. dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 04/11/2004, 17h32

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