Page 1 sur 1

dupliquer une ligne d'une table mysql

Posté : 21 janv. 2007, 20:35
par HD
salut
j'ai une table mysql qui contient un "produit1" et toutes ses caractéristiques (une 30aine de champs)
sachant que le 1er champs : "id" est en auto_increment
je voudrais créer, dans la même table, un "produit2" qui reprend exactement les mêmes valeurs pour tous les champs ; sauf bien sûr pour id qui doit etre id+1 (auto increment !)
y a t il un code simple pour faire cela, plutot de faire insert into ... champs 1, champs 2...
merci d'avance !

Posté : 21 janv. 2007, 20:50
par Truc
Avec une requête INSERT ... SELECT
=> google ou forum question déjà abordée

Posté : 21 janv. 2007, 20:56
par HD
si tu crois que j'ai pas cherché ! c'est comme je ne trouve pas que je poste ici...

Posté : 21 janv. 2007, 21:33
par zeus
Justement, Truc te donnait la syntaxe à utiliser :

Code : Tout sélectionner

INSERT ... SELECT
Il te conseillait ensuite de chercher cette syntaxe sur google ou dans le forum ;)
http://www.google.fr/search?q=MySQL+ins ... =firefox-a

Posté : 21 janv. 2007, 22:08
par Truc
J'ai oublié le lien vers google ? :lol:
Ni plus ni moins que zeus :)
Je ne pensais pas qu'il t'en faudrait plus.

Posté : 22 janv. 2007, 00:09
par zeus
Disons que la lecture en diagonale a quelques conséquences imprévues.
Comme celle de rater des informations importantes. ;)

Je sais de quoi je parle 8-|

Posté : 22 janv. 2007, 01:37
par Ajoloca
Bonsoir,
je voudrais créer, dans la même table, un "produit2" qui reprend exactement les mêmes valeurs pour tous les champs ;
Si je comprends bien, tu veux dupliquer tes informations dans la même table.

Bien que je ne comprenne pas l'intérêt pourquoi ne pas exécuter la requête deux fois ???.
La seule précaution à prendre est de donner la valeur null à la colonne AUTO_INCREMENT

Posté : 22 janv. 2007, 13:59
par HD
					$verif = "INSERT INTO articles (ART_REF,ART_FOURNI,ART_RUBR_DEFAUT)
					SELECT ART_REF,ART_FOURNI,ART_RUBR_DEFAUT
					FROM articles WHERE ART_REF='$ref'";
$res = mysql_query($verif) or die($verif.' '.mysql_error());
$res2 = mysql_num_rows($res);
affiche l'erreur :
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource
vous remarquez que je n'ai pas sélectionné le champs "id" qui est en auto increment
solution ? merci d'avance

Posté : 22 janv. 2007, 15:08
par zeus
Dans la doc de mysql_num_rows(), il est marqué
Pour récupérer le nombre de lignes affectées par une requête INSERT, UPDATE, REPLACE ou DELETE, utilisez la fonction mysql_affected_rows().
Tu m'étonnes HD, tu m'avais habitué à ne pas faire ce genre d'oubli ;)
NB : c'est une taquinerie légère pas une critique méchante :lol:

Posté : 22 janv. 2007, 15:22
par HD
Dans la doc de mysql_num_rows(), il est marqué
Pour récupérer le nombre de lignes affectées par une requête INSERT, UPDATE, REPLACE ou DELETE, utilisez la fonction mysql_affected_rows().
Tu m'étonnes HD, tu m'avais habitué à ne pas faire ce genre d'oubli ;)
NB : c'est une taquinerie légère pas une critique méchante :lol:
désolé de te décevoir mais
Warning: mysql_affected_rows(): supplied resource is not a valid MySQL-Link resource

:(

Posté : 22 janv. 2007, 15:24
par HD
oula zeus t as pas remarqué que
$res2 = mysql_num_rows($res); 
n'a pas lieu d'être !!! :lol: :wink:

Posté : 22 janv. 2007, 15:25
par Jules Petibidon
hello,

lorsque la requete est de type insert ou update, mysql_query renvoie un booleen et non une ressource...

donc premierement tu peux tester $res pour savoir si la requete a été effectuée, ensuite ton mysql_affected_rows doit recevoir ta ressource de connexion pour donner un résultat.

Posté : 22 janv. 2007, 15:30
par zeus
Non seulement, j'avais bien détecté que ce n'était pas mysql_num_rows() qu'il fallait utiliser mais mysql_affected_rows(), mais en plus, il est vraiq ue dans ton cas, avec un INSERT simple, cette ligne n'a pas trop d'influence :-k

De plus, comme le dit très justement Jules, ce n'est pas le résultat de la requête qu'il faut passer ;)

Posté : 22 janv. 2007, 15:32
par HD
en tous cas avec mysql_num_rows :pouce: (l'autre bug) et en supprimant cette ligne ca marche parfaitement
merci à tous !