Aller au contenu

Copier les données d'un champs dans un autre champs d'une table differente


Sujets conseillés

Posté

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 :

Le code :

<?php
mysql_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(); ?>

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 :blush: .

A bientôt et merci d'avance pour vos réponses !! :)

Amo.

Posté

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 :

<?php
mysql_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.

Posté (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é par Amo_Artemis
Posté (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é par dams41
Posté (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 :

<?php
mysql_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é par Amo_Artemis
Posté

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.

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...