superaldoisdead Posté 11 Avril 2007 Posté 11 Avril 2007 bonjour!! voila mon probleme, débutant en SQL je ne sais pas trop comment faire cela: Quand j'insere dans une table, jai besoin qu'une insertion se fasse dans une autre table au meme moment. Par exemple: jai ma table acteur (idAct, nom), la table video (idVid, URL) et la table d'association assoc (idAct, idVid) quand j'insere une nouvelle video, il faut ke jmette a jour la table d'association. J'ai essayé de reprendre l'idVid que je viens d'inserer grace a LAST_INSERT_ID mais ca me renvoie 0 a chaque fois!! Pourtant jai bien un INSERT suivi de LAST_INSERT_ID: $req = "INSERT INTO video VALUES ('', '$URL')";$res = mysql_query($req);$mysql_id = mysql_query("SELECT LAST_INSERT_ID()"); On ma dit d'essayer de le faire dans un trigger, car les deux instructions se suivrait et seraient entourées de BEGIN et END, est que cest ca quil faut faire?? Y a t-il une autre solution?? Merci a tous Superaldoisdead
Portekoi Posté 11 Avril 2007 Posté 11 Avril 2007 Bonjour, Est ce que ton champ est bien en AUTO_INCREMENT ? Portekoi
Jeromnimo Posté 11 Avril 2007 Posté 11 Avril 2007 Bonjour, as-tu vérifié que ton INSERT se déroulait correctement ? Normalement, si tu as un champ id en auto increment, tu ne devrais pas préciser le ' ' pour ta première valeur... De plus, si ce champ est défini comme clé primaire, tu devrais te faire jeter, en te disant que la contrainte d'unicité de la clé primaire n'est pas respectée... (vu que tu insères à chaque fois ' ' dans ta première colonne...)
Kent Posté 11 Avril 2007 Posté 11 Avril 2007 (modifié) quand j'insere une nouvelle video, il faut ke jmette a jour la table d'association. pour l'idvideo tu mets l'idvideo just inséré mais pour l'acteur ?? tu le spécifie manuellement ? sinon pour récuperer l'id just inseré $req = "INSERT INTO video VALUES ('', '$URL')";$res = mysql_query($req);$id_justinsere_video = mysql_insert_id();mysql_query("INSERT INTO assoc VALUES('$id_justinsere_video')"); et pour faire ça avec un trigger (mysql 5 minimum) dans phpmyadmin tu execute ça CREATE TRIGGER ajout_auto_dans_asso AFTER INSERT ON videoFOR EACH ROW INSERT INTO asso VALUES(new.idVid); en supposant que ta table asso ne contient qu'un champs idVid et que celui-ci n'est pas en auto-incrément évidemment. Bon courage. Modifié 11 Avril 2007 par Kent
superaldoisdead Posté 11 Avril 2007 Auteur Posté 11 Avril 2007 merci de vos reponses!! Portekoi: Oui mon champ est bien en auto_increment Jeromnimo: Mon INSERT se deroule sans problemes, préciser '' pour un champ auto_increment ca marche, et les valeurs de ces champs sont l'auto_increment et non '' Mais la jai honte , en fait je testais directement dans phpmyadmin je faisais en fait les requetes l'une apres l'autre mais en fait il fallait copier les deux requetes séparées par un point virugle mais ca me fait poser une nouvelle question: $req = "INSERT INTO video VALUES ('', '$URL')"; $res = mysql_query($req); if($res = TRUE){ $mysql_id = mysql_query("SELECT LAST_INSERT_ID()"); est ce que ce que LAST_INSERT_ID() me renverra bien ce quil faut dans ce code. Mes requetes se suivent dans le code PHP mais est ce quelles se suivront apres dans le serveur qui gere la BDD??? Oui vu que je copiais directement mes deux requetes dans phpmyadmin pour les tester! La ca sera peut etre plus pareil,?? Merci a tous Superaldoisdead Merci de ta reponse Kent!! Un trigger me permet donc de gerer ca sans le gerer dans le code php?? oui, l'id de l'acteur sera spécifié manuellement!!
Kent Posté 11 Avril 2007 Posté 11 Avril 2007 (modifié) Théoriquement oui je ne vois pas le soucis. Cependant voici ce que j'ai trouvé sur cette page http://fr.php.net/mysql_insert_id Attention mysql_insert_id() convertit le type de valeur retourné par la fonction C de MySQL C mysql_insert_id() en type PHP long (appelé int en PHP). Si votre colonne de type AUTO_INCREMENT est une colonne de type BIGINT, la valeur retournée par mysql_insert_id() sera incorrecte. À la place, utilisez la fonction interne MySQL LAST_INSERT_ID() dans une requête SQL. D'ailleurs dans les commentaires laissé sur cette page il y a des fonctions toutes prêtes pour récuperer le dernier id inseré. Je t'invite à les consulter en cas de doute. _________________ Oui un trigger te permet de gerer ça tout seul au niveau de la base de donnée sans utiliser php, mais l'utilisation de trigger requiert le droit "SUPER" sur ta base de donnée et tout les hebergeurs ne le donne pas Modifié 11 Avril 2007 par Kent
superaldoisdead Posté 11 Avril 2007 Auteur Posté 11 Avril 2007 Merci Kent de ta reponse!! Je vais regarder ton lien tout de suite!!
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant