Valeur courante de la transaction - Version imprimable +- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org) +-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38) +--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51) +--- Sujet : Valeur courante de la transaction (/showthread.php?tid=4024) |
Valeur courante de la transaction - comg - 01-06-2009 Bonjour à tous, Je me retrouve confronté à un problème, que j'ai toujours cherché à éviter jusqu'à présent, mais qui je sais possède une solution pratique. Voilà, j'ai 2 tables : CARTES id_carte nom_carte CARTES_CASES id_case id_carte type_case Et j'aimerai creer une carte (donc 1 entrée dans CARTES et X entrées dans CARTES_CASES) en reprenant le même id_carte Je crois qu'il faut utiliser une transaction SQL et la fonction currval mais n'étant pas trés bon en SQL, et n'arrivant pas à me dépatouiller avec les solutions trouvées sur le net, je me tourne vers vous Si quelqu'un saurait m'expliquer un peu près comment cela marche, je lui en serai trés reconnaissant. En vous remerciant d'avance. RE: [MySQL] Valeur courante de la transaction - Argorate - 02-06-2009 J'utilise exactement ce syteme, mis a part que si tu n'as qu'une carte, je ne vois aucune utilité a ton "id_carte" dans ta seconde table. Je ne vois pas ton problème? tu veux créer une carte, tu semble avoir compris comment gerer tes tables, il te suffit après de dire : type case = 1 <=> plaine type case = 2 <=> foret ... (avec tes conventions) et de remplir la BDD pour obtenir la carte que tu souhaites. Par contre es ce que tu travail avec des X et Y? Parceque si une carte <=> 1 type_case, c'est pas la peine de faire tout ce trafic... RE: [MySQL] Valeur courante de la transaction - comg - 02-06-2009 J'ai oublié de préciser qu'il y avait plusieurs cartes C'est pour un petit jeu avec plusieurs carte possible (plus ou moins grande, avec des obstacles différents ect) Et si je donne cette exemple, c'est surtout pour illustrer mais je cherche en réalité la solution générale à ce problème : Faire plusieurs entrée SQL avec des valeurs d'id (auto_incrementées) identiques. Merci tout de même de ton aide. Edit : Ah oui et je travaille effectivement avec des X et Y, ainsi qu'avec des TailleX et TailleY pour la carte, mais je n'ai pas juger important de les poster RE: [MySQL] Valeur courante de la transaction - Roworll - 02-06-2009 Je ne pense pas qu'utiliser les transactions soit nécessaire (à moins que tu ne génère plusieurs cartes de manière simultanée) Pour rappel, les transactions servent à assurer la cohérence d'un jeu d'instruction SQL. Soit toutes les instructions sont validées, soit elles sont toutes annulées) La fonction qu'il te faut est mysql_insert_id() qui renvoie le dernier ID inséré en base de données. En gros, ça te donne un truc du genre Code PHP :
L'utilisation des transactions est donc superflue. RE: [MySQL] Valeur courante de la transaction - wild-D - 02-06-2009 me semble justement que son soucis est d'assurer la cohérence de ses données insérées. (a priori plus pour un éditeur de map ou un autre contexte applicatif; que de l'insertion brute) si je reprends ton code roworll; tu vas te retrouver avec une fin de script inopinée si une de tes requêtes foire (...), résultat t'auras inséré qu'une partie de la carte dans la bdd. Or c'est justement ce qu'il veut éviter il me semble. RE: [MySQL] Valeur courante de la transaction - Roworll - 02-06-2009 Pour moi, le coeur du problème, c'est ça comg a écrit :Et j'aimerai creer une carte (donc 1 entrée dans CARTES et X entrées dans CARTES_CASES) en reprenant le même id_carte S'il faut absolument transactionner (je garde le code très basique pour une meilleure lecture): Code PHP :
Attention, les tables doivent être dans un format supportant les transactions (InnoDB) RE: [MySQL] Valeur courante de la transaction - comg - 02-06-2009 Dans un premier temps ta fonction mysql_insert_id devrait amplement palier à mon soucis ! Et je t'en remercie ! Pour ce qui est de la transaction, j'avoue en avoir parlé un peu sans savoir exactement de quoi il retournait. En tout cas merci à vous 2 pour votre aide précieuse ! Je crois que j'ai tout les outils nécéssaire pour me lancer la dedans. J'avais cependant déjà utiliser (en aveugle :p) une notation du genre : INSERT INTO carte_case VALUES(carte_id_seq_carte,1) ou un truc du genre... Ou bien même un currval, mais c'était il y a un moment. Merci en tout cas ! |