Partage
  • Partager sur Facebook
  • Partager sur Twitter

récupérer id lorsqu'on crée une entrée

Sujet résolu
    21 mai 2011 à 23:27:26

    Bonjour tout le monde
    le problème est que je possède une table qui ne contient rien excepter les id de 3 tables en faite elle permet le lien entre les 3 autres.
    Lorsqu'un utilisateur envoie un formulaire je dois créer une entrée dans chaque table (les 3 dont je vous parlais) et mettre leur id dans la table qui permet le lien.
    jusque là ça va mais le problème c'est que si ils sont deux je pourrai prendre l'entrée créer par l'utilisateur A pour l'utilisateur B et inversement ce qui pose un gros problème puisque les 2 entrées contienne des infos différente.

    pouvez vous m'aider pour que ce genre de problème n'arrive pas?

    merci d'avance pour vos problème en espèrent avoir une solution ^^
    • Partager sur Facebook
    • Partager sur Twitter
      22 mai 2011 à 0:03:44

      Essaie de voir du côté des triggers.
      • Partager sur Facebook
      • Partager sur Twitter
        22 mai 2011 à 1:10:08

        j'ai été voir les triggers mais le tuto n'est pas très claire et je n'ai pas très bien compris ce qu'est un triggers pourrais tu m'expliquer en quelque phrase stp?
        • Partager sur Facebook
        • Partager sur Twitter
          22 mai 2011 à 1:18:54

          En fait, un trigger, ou déclencheur est une procédure écrite en PL/SQL, permet, avant ou apès une opération sur une table, SELECT, UPDATE ou DELETE, de faire des opérations sur d'autres tables.
          • Partager sur Facebook
          • Partager sur Twitter
            22 mai 2011 à 1:25:07

            CREATE TRIGGER recettes_vendeurs_insert_t
            BEFORE INSERT ON recettes_vendeurs
            FOR EACH ROW
            BEGIN
            INSERT INTO recettes_jour_mat (rc_date, rc_montant) VALUES (NEW.rc_date, NEW.rc_montant)
            ON DUPLICATE KEY UPDATE rc_montant = rc_montant + NEW.rc_montant;

            INSERT INTO recettes_mois_mat (rc_year, rc_month, rc_montant)
            VALUES (YEAR( NEW.rc_date ), MONTH( NEW.rc_date ), NEW.rc_montant)
            ON DUPLICATE KEY UPDATE rc_montant = rc_montant + NEW.rc_montant;

            INSERT INTO recettes_vendeur_mois_mat (rc_year, rc_month, vd_id, rc_montant)
            VALUES (YEAR( NEW.rc_date ), MONTH( NEW.rc_date ), NEW.vd_id, NEW.rc_montant)
            ON DUPLICATE KEY UPDATE rc_montant = rc_montant + NEW.rc_montant;
            END//


            voici un exemple qui est donner ici

            je n'arrive pas a comprendre la "construction" du trigger je sais que je suis un peu embêtent pour rester poli ^^
            mais pourrais tu m'expliquer vite fait avec cette exemple ou avec mon problème?

            j'ai essayer de comprendre sur le tuto mais il n'explique pas vraiment comment créer un trigger morceau par morceau et comment sa fonctionne :s

            merci de ta patience
            • Partager sur Facebook
            • Partager sur Twitter
              22 mai 2011 à 1:44:18

              CREATE TRIGGER recettes_vendeurs_insert_t   --Création du trigger
              BEFORE INSERT ON recettes_vendeurs          --Il s'execute avant l'insertion sur la table recettes_vendeurs
              FOR EACH ROW                                --Pour chaque ligne
              BEGIN                                       --Début de la procédure
              INSERT INTO recettes_jour_mat (rc_date, rc_montant) VALUES (NEW.rc_date, NEW.rc_montant)  --insertion dans la table
               ON DUPLICATE KEY UPDATE rc_montant = rc_montant + NEW.rc_montant;
              
               INSERT INTO recettes_mois_mat (rc_year, rc_month, rc_montant) --insertion dans le table recettes_mois_mat
               VALUES (YEAR( NEW.rc_date ), MONTH( NEW.rc_date ), NEW.rc_montant)  -- _New.rcDate est la valeur insérer dans la table recette_vendeurs Si c'est un update                                                               -- ou un delete, tu récupère les anciennes valeurs avec OLD.
               ON DUPLICATE KEY UPDATE rc_montant = rc_montant + NEW.rc_montant;
              
               INSERT INTO recettes_vendeur_mois_mat (rc_year, rc_month, vd_id, rc_montant)
               VALUES (YEAR( NEW.rc_date ), MONTH( NEW.rc_date ), NEW.vd_id, NEW.rc_montant)
               ON DUPLICATE KEY UPDATE rc_montant = rc_montant + NEW.rc_montant;
               END//
              

              ce que tu peux faire dans ton trigger, c'est qu'à chaque insert dans une des trois table, fait un update dans la dernière ligne insérer dans la tale ui fait le lien.
              • Partager sur Facebook
              • Partager sur Twitter
                22 mai 2011 à 10:05:17

                @Carman: je veux bien te filer une solution pour ton problème mais à prori tes trois tables ne servent à rien, des select + group by feraient exactement la même chose.

                Tracker.
                • Partager sur Facebook
                • Partager sur Twitter
                  22 mai 2011 à 10:23:41

                  C'est tiré de mon tuto sur les triggers XDDD

                  Citation

                  le problème est que je possède une table qui ne contient rien excepter les id de 3 tables en faite elle permet le lien entre les 3 autres.
                  Lorsqu'un utilisateur envoie un formulaire je dois créer une entrée dans chaque table (les 3 dont je vous parlais) et mettre leur id dans la table qui permet le lien.



                  Je ne vois pas à quoi un trigger pourrait servir pour ça.

                  Tu insères les 3 lignes dans les 3 tables, pour chacune tu récupères la clé primaire (mysql_insert_id() ou $pdo->insert_id() ou autre) et ensuite tu insères dans ta table de lien.

                  Pourquoi 3 tables ? Ça a l'air bizarre... y'a quoi dedans ?
                  • Partager sur Facebook
                  • Partager sur Twitter
                    22 mai 2011 à 16:55:41

                    en faite dans la première j'ai le nom de l'entreprise ou des entreprise du membre avec quelque info comme les benefice
                    dans la deuxième j'ai les information pour chaque ville
                    et dans la troisième j'ai la table général ou il y a les information du membre dont son nom pour faire le lien avec l'entreprise

                    les 3 sont dans une table pour pouvoir faire le lien



                    Tracker j'ai été voir pour le group by mais je pense pas que sa pourrais m'aider puisque moi c un id qu'il me faut et les données ne me sont d'aucune utilité puisque deux membres peuvent avoir les même données
                    • Partager sur Facebook
                    • Partager sur Twitter
                      22 mai 2011 à 19:14:30

                      Le select + group by c'était concernant les ordres passés plus haut. Vue la description que tu fais maintenant regarde la response de milord ;)
                      Celà dit je comprends pas ta remarque sur la réutilisation des enregistrements entre plusieurs utilisateurs... bref

                      Tracker.
                      • Partager sur Facebook
                      • Partager sur Twitter
                        22 mai 2011 à 23:23:02

                        bien ce que tu me propose avec group by sa classe en fonction d'un champ mais moi je ne peux pas utiliser sa


                        EDITE
                        Suite a quelque recherche j'ai trouver la réponse
                        il suffit d'utilisé tout de suite après la requête INSERT (en général celle-là)

                        $variable = mysql_insert_id();

                        et sa nous retourne l'id de la dernière entrée créer c'est donc pour cette raison qu'il faut le faire tout de suite après

                        merci à ceux qui on essayer de m'aider continuer ;-)
                        • Partager sur Facebook
                        • Partager sur Twitter

                        récupérer id lorsqu'on crée une entrée

                        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                        • Editeur
                        • Markdown