dupliquer un enregistrement mysql ?

dupliquer un enregistrement mysql ? - PHP - Programmation

Marsh Posté le 08-03-2004 à 13:19:05    

dans un certain cas de mon algo, je dois dupliquer tout un enregistrement d'une table (qui fait plus de 70 champs...)
 
savez vous comment faire sans avoir à realiser un SELECT * puis un INSERT into des 70 champs en se tapant à la main l'écriture des champs ?
 
merci d'avance :)
 

Reply

Marsh Posté le 08-03-2004 à 13:19:05   

Reply

Marsh Posté le 08-03-2004 à 13:22:26    

ah oui, j'avais bien une idée :

Erreur de base de données :
Erreur dans la requête :  
INSERT INTO `BL_ENTETE` SELECT * FROM `BL_ENTETE` WHERE id='125'
=> Table/alias: 'BL_ENTETE' non unique


 
mais ça ne marche pas comme vous pouvez le voir :/

Reply

Marsh Posté le 08-03-2004 à 13:44:52    

Eh oui, la table dans laquelle se fait l'insertion ne doit pas apparaître dans le SELECT [:proy]  
La seule solution pour ne pas tout retaper serait de créer une table temporaire avec la même structure, faire un insert ... select dans cette table, puis de nouveau un insert ... select vers la table d'origine :/

Reply

Marsh Posté le 08-03-2004 à 13:51:46    

J'ai pas compris le pb de la table qui ne doit pas apparaître dans le select.
 
Avec Oracle :

Code :
  1. create table tempp (a number(2), b varchar2(3));
  2. insert into tempp (a, b) values (1,'a');
  3. insert into tempp select * from tempp;
  4. select * from tempp;
  5.          A B
  6. ---------- ---
  7.          1 a
  8.          1 a


 
Ca marche sans pb. Par contre attention aux clefs uniques/primaires. Je vois que tu dupliques la ligne avec l'id "125". Ca pourrait poser problème si une clef unique existe sur cette colonne.

Reply

Marsh Posté le 08-03-2004 à 14:06:56    

l'id est un auto_increment unique :/
 
ma requette n'a pas un id='125' en dur mais un id='".$_GET['id']."'" en fait :)
 
une solution ? :/


Message édité par Shurik le 08-03-2004 à 14:08:32
Reply

Marsh Posté le 08-03-2004 à 14:09:45    

Vinx a écrit :

J'ai pas compris le pb de la table qui ne doit pas apparaître dans le select.
...


bin sous mysql ( comme c'est marqué dans le titre) c'est comme ça.
 
Shurik, si c'était juste un problème d'auto_increment suffirait de ne pas faire 'select *' mais juste les bons champs ...

Reply

Marsh Posté le 08-03-2004 à 15:39:22    

ce n'est pas uniquement un problème d'auto increment car avec juste :
 
$sql="INSERT INTO `BL_ENTETE` SELECT code_depot_new FROM `BL_ENTETE` WHERE id='".$_GET['id']."'";
 
il me sort :
INSERT INTO `BL_ENTETE` SELECT code_depot_new FROM `BL_ENTETE` WHERE id='125'
=> Table/alias: 'BL_ENTETE' non unique

Reply

Marsh Posté le 01-04-2008 à 18:24:42    

Tu as une clé primaire qui est dupliquée.
 
J'ai la meme chose . il faudrait que je reprenne tous les champs un par 1 dans ma requete SELECT
 
Au lieu de :
INSERT INTO $table (SELECT * FROM $table WHERE cle=5)
 
Je devrai mettre
INSERT INTO $table (SELECT null, chp1, chp2, chp3 FROM $table WHERE cle=5)  
null étant la colone de la clé et dans ce cas mysql recherchera la nouvelle valeur.
 
Mon soucis est que je voudrais dupliquer des enregistrement de plusieurs tables différents et je cherche un moyen pour simplifier cela, une idée ?


Message édité par snike le 01-04-2008 à 18:28:31

---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:
Reply

Marsh Posté le 01-04-2008 à 18:37:43    

Ca à l'air de marcher avec cela :
 
$list="";
$sql="SHOW COLUMNS FROM feries;";
$res=mysql_query($sql);
while ($row = mysql_fetch_array($res)) {
 if ($_GET['cond'] == $row[0])
  $list.="null, ";
 else
  $list.=$row[0].", ";
}
 
où $list contien les champs de ma table dans laquelle je remplace mon champ clé par null


---------------
Le problème avec les idées derrière la tête c'est qu'on ne peut pas les voir :??:
Reply

Sujets relatifs:

Leave a Replay

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