[mysql+php] Insert....select et modifications au passage

fraid26
WRInaute discret
WRInaute discret
 
Messages: 139
Inscription: 3 Oct 2008

[mysql+php] Insert....select et modifications au passage

Message le Mar Aoû 18, 2009 19:21

Bonsoir tout le monde.

Voila déjà quelques heures que je cherche une solution à mon problème mais je ne trouve pas.

Je veux proposer aux utilisateurs la possibilité de copier un enregistrement d'une table.
Cependant je dois changer deux paramètres au passage...

Code: Tout sélectionner
$re = mysql_query("SELECT id_facture FROM n_factures where id_societe='$id_societe' and scenario='$scenario'") or die(mysql_error());
while ($ro = mysql_fetch_array($re, MYSQL_NUM))
{
$id_facture=$ro[0];
mysql_query("INSERT INTO n_factures ??modification du nouveau id_facture='$new_id_facture' et scenario='$new_scenario'?? SELECT ???? FROM n_factures WHERE id_facture='$id_facture'");
}


mais je ne connais pas du tout la syntaxe, et les recherches ne donnent rien de pertinent...

merci !

Fred

jcaron
WRInaute accro
WRInaute accro
 
Messages: 2685
Inscription: 13 Fév 2004

Re: [mysql+php] Insert....select et modifications au passage

Message le Mer Aoû 19, 2009 0:24

INSERT INTO table (nom_colonne_1,nom_colonne_2...) SELECT nouvelle_valeur_pour_colonne_1,nouvelle_valeur_pour_colonne_2... FROM table WHERE conditions

nouvelle_valeur pouvant être le nom de la colonne (on reprend alors sa valeur), ou une expression quelconque.

http://dev.mysql.com/doc/refman/5.0/en/insert-select.html

Jacques.

fraid26
WRInaute discret
WRInaute discret
 
Messages: 139
Inscription: 3 Oct 2008

Re: [mysql+php] Insert....select et modifications au passage

Message le Mer Aoû 19, 2009 11:25

Bonjour,

j'ai essayé INSERT INTO table (table.*) SELECT table.* FROM table WHERE conditions

mais j'ai le message d'erreur suivant :

Column count doesn't match value count at row 1

J'aimerais éviter de recopier les colonnes à la main, car c'est possible que j'en rajoute lorsque je met à jour le script, et cela m'éviterai de mettre à jour cette page (peur d'oublier !)

une idée ?

merci.

fraid26
WRInaute discret
WRInaute discret
 
Messages: 139
Inscription: 3 Oct 2008

Re: [mysql+php] Insert....select et modifications au passage

Message le Mer Aoû 19, 2009 12:42

Bon étant un peu pressé, j'ai bidouillé une solution qui a l'air de marcher sans soucis :

Code: Tout sélectionner
   
// on récupère le nom des colonnes de la table
$colonnes_factures="";
   $req_structure = "SHOW COLUMNS FROM n_factures ";
   $re = mysql_query($req_structure) or die(mysql_error()); 
   while ($ro = mysql_fetch_array($re, MYSQL_NUM))
   {
   $colonnes_factures.="$ro[0],";
   }
// on supprime la dernière virgule, et la colonne 'id' qui est en auto_increment
   $colonnes_factures   =str_replace('id,', "", substr($colonnes_factures, 0, strlen($colonnes_factures)-1));

// on sélectionne les enregistrements à copier   
$re = mysql_query("SELECT id FROM n_factures where id_societe='$id_societe' and scenario='$scenario'") or die(mysql_error()); 
   while ($ro = mysql_fetch_array($re, MYSQL_NUM))
   {
   $id=$ro[0];
   $id_facture_courant++;
// on modifie les deux champs que je voulais modifier (on peut passer par un tableau si bcp de champs...)
   $colonnes_factures_new   =str_replace('id_facture', "'$id_facture_courant'", $colonnes_factures);
   $colonnes_factures_new   =str_replace('scenario', "'$id_scenario'", $colonnes_factures_new);
   mysql_query("INSERT INTO n_factures ($colonnes_factures) SELECT $colonnes_factures_new FROM n_factures WHERE id_societe='$id_societe' and scenario='$scenario' and id='$id'") or die(mysql_error());
   }


Voilà, si ça peut aider !

Frederic


Si vous avez aimé cette discussion, partagez-la sur vos réseaux sociaux préférés :

Lectures recommandées sur ce thème :



Qui est en ligne

Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité