Amo_Artemis Posté 21 Février 2007 Posté 21 Février 2007 Bonjour à tous, Cela fait maintenant trois jours que je cherche a copier les données d'un champ a un autre en utilisant une variable dans ma requête SQL, cependant je sèche à present... J'ai fais plusieurs recherches sur le net ainsi que demander aux personnes autour de moi mais sans résultat. Voici le problème : Les tables concernés : characters.sql (lien) seven_signs.sql (lien) Le code : <?phpmysql_connect("localhost", "root", "");mysql_select_db("ma_base");$id_perso = mysql_query("SELECT obj_Id FROM characters") or die(mysql_error());while ($id_persos = mysql_fetch_array($id_perso) ){echo $id_persos['obj_Id'];echo "<br />";}mysql_query("INSERT INTO seven_signs (char_obj_id, cabal, seal, red_stones, green_stones, blue_stones, ancient_adena_amount, contribution_score) VALUES (`".$id_perso."`, 'dawn', '1', '0', '0', '0', '0', '0')") or die(mysql_error());mysql_close(); ?> Le résultat actuel : http://nwn2-artemis.fr/amo_req_sql.php (voir l'erreur à la fin, je ne vois pas du tout ce que c'est...) Apres avoir soumis le problème a un ami nous nous sommes dit qu'en fait la dernière requête devait être répétée en boucle pour crée chaque entrée, peut-être avec un "while", mais nous n'avons aucune idée de quelle façon nous y prendre... Mais nous avons aussi été confronté au problème du "oui mais si on fait une boucle, ca va s'arreter quand? lorsqu'il aura fait le tour et qu'on aura une erreur disant que l'entrée est dupliquée?" si oui ce n'est pas vraiment un souci, l'important etant que les tables soient copiés. Le résultat souhaité :1- Récupérer les données du champ "obj_Id" de ma table "characters" via la variable $id_perso (dans l'etat actuel du code).2- Copier (juste copier, pas déplacer) ces données dans le champ "char_obj_id" de ma table "seven_signs". Il me semble avoir lu quelque part que les données reçue avec mysql_query() n'etaient pas directement exploitable, j'ai donc tenter un "bricolage" qui c'est finalement averer inutile, je ne vous ferais pas part de l'horreur donc . A bientôt et merci d'avance pour vos réponses !! Amo.
dams41 Posté 21 Février 2007 Posté 21 Février 2007 Il y a une erreur sémantique à mon avis : dans le code suivant, VALUES (`".$id_perso."`, 'dawn', '1', '0', '0', '0', '0', '0')") or die(mysql_error()); tu utilises la variable $id_perso qui est un descripteur de ressources mysql, initialisé par $id_perso = mysql_query("SELECT obj_Id FROM characters") or die(mysql_error()); donc forcément, ça n'a aucun sens dans la base de données. Ce que tu veux faire, c'est peut-être : <?phpmysql_connect("localhost", "root", "");mysql_select_db("ma_base");$id_perso = mysql_query("SELECT obj_Id FROM characters") or die(mysql_error());while ($id_persos = mysql_fetch_array($id_perso) ){echo $id_persos['obj_Id'];$id_p = $id_persos['obj_Id'];echo "<br />";}mysql_query("INSERT INTO seven_signs (char_obj_id, cabal, seal, red_stones, green_stones, blue_stones, ancient_adena_amount, contribution_score) VALUES (`".$id_p."`, 'dawn', '1', '0', '0', '0', '0', '0')") or die(mysql_error());mysql_close(); ?> Du moins, ça me semblerait plus cohérent.
Amo_Artemis Posté 21 Février 2007 Auteur Posté 21 Février 2007 (modifié) Salut, Merci pouir ta réponse Dams41, malgrés ceci j'obtiens toujours " Champ '268474174' inconnu dans field list " (268474174 est une donnée de ma table characters, champ obj_Id) J'ai oublier d'attirer votre attention sur mes variables sur les quelle je n'ai absolument pas été clair, j'en ai une qui est $id_perso et une autre $id_persos. Dans le fond elles ont la même valeur, mais bon... Si on regarde le code en vitesse on passe dessus sans voir le "s" en plus. Modifié 21 Février 2007 par Amo_Artemis
dams41 Posté 21 Février 2007 Posté 21 Février 2007 (modifié) en effet, il y a aussi ce problème là ; dans mysql_query("INSERT INTO seven_signs (char_obj_id, cabal, seal, red_stones, green_stones, blue_stones, ancient_adena_amount, contribution_score) VALUES (`".$id_p."`, 'dawn', '1', '0', '0', '0', '0', '0')") or die(mysql_error()); et plus précisemment VALUES (`".$id_p."`, les quotes utilisées ne sont pas les bonnes. Tu utilises le ` (Alt-GR 7) alors que ces quotes sont utilisées pour échapper le nom des colonnes (d'où l'erreur que tu obtiens). Remplace les par ', et ça devrai aller. mysql_query("INSERT INTO seven_signs (char_obj_id, cabal, seal, red_stones, green_stones, blue_stones, ancient_adena_amount, contribution_score) VALUES ('".$id_p."', 'dawn', '1', '0', '0', '0', '0', '0')") or die(mysql_error()); Edit : j'ai bien vu le "s" à id_perso, mais je confirme que dans la requete que tu nous a posté, tu cherches à insérer un descripteur de ressource mysql (qui n'a de sens que pour PHP au moment de l'exécution du script) dans ta BD en tant qu'identifiant. C'est peut-être ce que tu veux faire, mais je trouve ça très étrange. Modifié 21 Février 2007 par dams41
Amo_Artemis Posté 21 Février 2007 Auteur Posté 21 Février 2007 (modifié) Exact je n'ai plus l'erreur et la requête fonctionne correctement, merci beaucoup Dams41. Reste a savoir maintenant comment faire pour que les données soient toute recopiée dans la table car là, la requête n'inscrit que la dernière entrée qu'elle a récupéré dans la table, faire faire la boucle en fait... Le plus compliqué a mon sens... Aujourd'hui, avec tes modifs le code est ainsi : <?phpmysql_connect("localhost", "root", "");mysql_select_db("l2jdb");$id_perso = mysql_query("SELECT obj_Id FROM characters") or die(mysql_error());while ($id_persos = mysql_fetch_array($id_perso) ){echo $id_persos['obj_Id'];$id_p = $id_persos['obj_Id'];echo "<br />";}mysql_query("INSERT INTO seven_signs (char_obj_id, cabal, seal, red_stones, green_stones, blue_stones, ancient_adena_amount, contribution_score) VALUES ('".$id_p."', 'dawn', '1', '0', '0', '0', '0', '0')") or die(mysql_error());mysql_close();?> Modifié 21 Février 2007 par Amo_Artemis
TheRec Posté 21 Février 2007 Posté 21 Février 2007 Bonsoir, Il me semble que tu peux faire ce que tu souhaites en une seule requête avec MySQL (version 4.1 ou plus), grâce à la syntaxe "INSERT ... SELECT" : INSERT INTO seven_signs (char_obj_id, cabal, seal, red_stones, green_stones, blue_stones, ancient_adena_amount, contribution_score) SELECT characters.obj_Id, 'dawn', '1', '0', '0', '0', '0', '0' FROM characters Si tu veux limiter à quelques éléments selon un critère ou un nombre limite d'enregistrements, tu es libre d'ajouter respectivement une clause WHERE et/ou LIMIT à la sous-requête "SELECT" (après "FROM characters"). Bonne continuation.
Amo_Artemis Posté 21 Février 2007 Auteur Posté 21 Février 2007 (modifié) Ca fonctionne, un grand merci à vous !! Le problème est résolu. Modifié 21 Février 2007 par Amo_Artemis
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant