Dupliquer un enregistrement

Dupliquer un enregistrement - SQL/NoSQL - Programmation

Marsh Posté le 15-09-2005 à 12:52:50    

J'aimerai dupliquer un enregistrement avec un nouveau ID... je connais pas trop ces fonctions là en SQL...
 
je vous explique plus en détails... j'ai trois tables  
 
factures => numero_facture, id, date...
references_facture =>numero_facture, num_ref,titre....
items_facture=>numero_facture,num_ref,item, libelle, quantite,prix
 
 
mon script PHP me permet de construire des devis ou des factures.. il utilise pour ça les mêmes tables SQL... la difference entre un devis et une facture c'est son numero... sur un devis, la personne n'a qu'à cliquer sur un bouton "transformer en facture" et son numero change... et ça devient une facture...
 
Jusque là tout va bien...
 
le probleme c'est que quand un devis devient une facture.. il disparait de la liste des devis.. c pourquoi je voudrais dupliquer l'enregistrement plutot que de l'updater afin d'avoir une "copie" du devis et une facture...
 
comment feriez-vous ?


---------------
Freed102
Reply

Marsh Posté le 15-09-2005 à 12:52:50   

Reply

Marsh Posté le 15-09-2005 à 13:08:07    

Au lieu d'utiliser UPDATE, utiliser INSERT.

Reply

Marsh Posté le 15-09-2005 à 13:09:06    

olivthill a écrit :

Au lieu d'utiliser UPDATE, utiliser INSERT.


oui mais ça m'oblige à recopier chaque champs.. et je voulais eviter ça


---------------
Freed102
Reply

Marsh Posté le 15-09-2005 à 14:01:36    

olivthill a écrit :

Au lieu d'utiliser UPDATE, utiliser INSERT.


 
j'ai lu sur un autre post que peut etre il faut faire un truc du genre :
 
INSERT INTO factures SELECT * FROM factures WHERE numero_facture='DEV000024';  
 
... mais à ce moment là comment je redefinis le numero de facture ?
 
comme ça ?  
 
 
INSERT INTO factures (numero_factures) VALUES ('000123') SELECT * FROM factures WHERE numero_facture=DEV000024;
 
.. ça me parait tordu !  :sweat:


Message édité par freed102 le 15-09-2005 à 14:06:35

---------------
Freed102
Reply

Marsh Posté le 15-09-2005 à 14:10:14    

INSERT INTO factures
SELECT '000123', champ2, champ3, <...>, champN
FROM factures
WHERE numero_facture='DEV000024';

Reply

Marsh Posté le 15-09-2005 à 14:11:52    

je capte pas là ! :sweat: pourquoi la valeur de mon champ se retrouve dans la liste des champs du select ?


---------------
Freed102
Reply

Marsh Posté le 15-09-2005 à 14:18:52    

En SQL, tu peux mettre une valeur constante dans un SELECT, une valeur qui donc en elle-même n'a pas de lien avec la table ...
 
Autre exemple:
 
SELECT 'TOTO' from maTable;
 
renvoie autant de fois TOTO qu'il y a de lignes dans la table.

Reply

Marsh Posté le 15-09-2005 à 14:25:56    

ah bon.... je savais pas ça... mais là dans mon cas je suis obligé de lister tous les champs ? SELECT '000123', champs2,champ3..." ?


---------------
Freed102
Reply

Marsh Posté le 15-09-2005 à 14:26:37    

Oui, je connais pas d'autre syntaxe.

Reply

Marsh Posté le 15-09-2005 à 14:33:38    

je viens d'essayer sur une table d'essai... ça a l'air de fonctionner !


---------------
Freed102
Reply

Marsh Posté le 15-09-2005 à 14:33:38   

Reply

Marsh Posté le 15-09-2005 à 14:41:48    

Tu en doutais ? :D

Reply

Marsh Posté le 15-09-2005 à 15:49:35    

bah je connaissais pas trop ces especes de formules magiques ! donc oui j'en doutais ! j'ai donc fait ça :
 

Code :
  1. if($_SESSION['new_numero_facture']!=$_SESSION['numero_facture'] && $_SESSION['duplicate']=true)
  2. {
  3. $dupl_sql1="INSERT INTO factures SELECT '$_SESSION[new_numero_facture]', '$_SESSION[type_commande]',id,contact,titre,total_ht,date_reg,date_modif,reglement,type_reglement,modalites_reglement,date_reglement,observations,tva  FROM factures WHERE numero_facture='$_SESSION[numero_facture]';";
  4. $dupl_sql2="INSERT INTO references_factures SELECT '$_SESSION[new_numero_facture]',num_ref, titre,contact,prix_ht FROM references_factures WHERE numero_facture='$_SESSION[numero_facture]';";
  5. $dupl_sql3="INSERT INTO items_facture SELECT '$_SESSION[new_numero_facture]',num_ref,item,libelle,quantite,prix_unitaire FROM items_facture WHERE numero_facture='$_SESSION[numero_facture]';";
  6.     if(mysql_query($dupl_sql1) or die(mysql_error()) && mysql_query($dupl_sql2) or die(mysql_error()) && mysql_query($dupl_sql3) or die(mysql_error()) )
  7.     {
  8.     $_SESSION['infos_dupli']="La facture à bien été dupliquée<br />";
  9.     $_SESSION['duplicate']=false;
  10.     $_SESSION['numero_facture']=$_SESSION['new_numero_facture'];
  11.     }
  12.     else
  13.     {
  14.     $_SESSION['infos_dupli']="Impossible de dupliquer la facture<br />";
  15.     }
  16.     //echo $sql1.$sql2.$sql3;
  17. }


 
... et ça a l'air de fonctionner... on bien verra quand mon boss va me dire "YA UN BUG !!!!"


Message édité par freed102 le 15-09-2005 à 16:01:24

---------------
Freed102
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed