JeuWeb - Crée ton jeu par navigateur
[resolu] Dupliquer - 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 : [resolu] Dupliquer (/showthread.php?tid=2071)

Pages : 1 2


[resolu] Dupliquer - Galaan - 27-11-2007

Voila la situation :
J'ai deux tables
TABLE_MERE (MERE_ID,[champs])
TABLE_FILLE (FILLE_ID,MERE_ID,[champs])

Je cherche une methode la plus simple possible pour dupliquer une fiche mere, accompagnee de ses filles bien entendu.

Je dois prendre en compte les deux choses suivantes :
- MERE peut avoir entre 0 et N filles.
- Je ne connais pas les champs contenue dans les tables.Ils sont ammenes a changer et j'ai pas envie de refaire le code a chaque fois que l'on change l'une des deux tables.

Merci d'avance.

Galaan


RE: Dupliquer - jean-baptiste - 27-11-2007

dupliqué ? tu vue dire inserré un nouvelle enregistrement dans tes tables ?


RE: Dupliquer - Galaan - 27-11-2007

Le meme avec seulement l'ID qui change.


RE: Dupliquer - naholyr - 27-11-2007

INSERT INTO maTable SELECT tousLesChampsSaufID FROM maTable

cela aura pour effet de dupliquer ta fiche, et l'id sera généré automatiquement vu qu'il s'agit certainement d'une clé primaire en auto-increment.


RE: Dupliquer - Galaan - 27-11-2007

1/ je ne connais pas tousLesChampsSaufID. Je suis oblige de faire un show columns avant.
2/ Pour les filles je ne peut pas faire ca.


RE: Dupliquer - naholyr - 27-11-2007

??? Tu ne connais pas la structure de ta table ???
C'est quand-même mieux pour faire un SELECT en général xD

En pur SQL c'est la seule méthode qui me vient à l'esprit, en une transaction bien sentie de ce genre ça se fait bien (en imaginant que ton schéma c'est mere{id,nom,prenom} <--1-n--> fille{id,id_mere,nom,prenom,age}) :
Code :
START TRANSACTION;

-- L'id de la mère que l'on veut dupliquer
SELECT @id_orig:=1

-- On duplique la mère sans ses filles
INSERT INTO meres (nom, prenom) SELECT nom, prenom FROM meres WHERE id = @id_orig;

-- On récupère l'id du clone
SELECT @id_new:=LAST_INSERT_ID();

-- On duplique toutes les filles attachées à l'ancienne mère, en précisant l'id de la nouvelle mère pour les filles clones
INSERT INTO filles (nom, prenom, age, id_mere) SELECT nom, prenom, age, @id_new FROM filles WHERE id_mere = @id_orig;

COMMIT;
Mais il faut impérativement connaître les noms des champs des tables. On peut faire des requêtes dynamiques en PL/SQL, mais je ne sais pas comment ça marche exactement, et là ça devient tout de suite beaucoup plus galère.


RE: Dupliquer - Galaan - 27-11-2007

C'est justement la le probleme c'est que la structure peut, et va changer. Donc je suis oblige de prevoir un systeme qui me permet de ne pas etre dependant des champs.


RE: Dupliquer - jean-baptiste - 27-11-2007

Autrement tu fait un num_auto sur l'id de la mère durant la seconde incrémentation et tu récupere celui ci pour le faire avec les filles ! ( l'id primaire des filles seron aussi en num_auto )

Num_auto : attribution automatique d'un ID.
Cela est assez simpas à réalisé


RE: Dupliquer - Galaan - 27-11-2007

Si j'avais ete maitre de mon destin , c'est exactement ce que j'aurais fait. Mais ca n'est pas le cas.


RE: Dupliquer - pascal - 27-11-2007

c'est pour un jeu au moins ?

pour le reste, il faut créer un code qui trouve les noms des champs de chaque table, crée les requêtes de migration et les exécute.

A+

Pascal