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

fraid26

WRInaute discret
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:
$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
 

fraid26

WRInaute discret
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
Bon étant un peu pressé, j'ai bidouillé une solution qui a l'air de marcher sans soucis :

Code:
// 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
 

Discussions similaires

Haut