dupliquer un enregistrement mysql ? - PHP - Programmation
Marsh Posté le 08-03-2004 à 13:22:26
ah oui, j'avais bien une idée :
Erreur de base de données : |
mais ça ne marche pas comme vous pouvez le voir
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
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
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 :
|
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.
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 ?
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 ...
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
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 ?
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
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