IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Copie d'une table à l'autre + mise a jour d'un champ dans la table d'arrivée


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Par défaut Copie d'une table à l'autre + mise a jour d'un champ dans la table d'arrivée
    Bonjour, j'ai un petit problème et je ne sais pas comment m'y prendre

    Voilà : je copie le contenu d'une table A dans une table B avec cette commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("INSERT INTO `B` SELECT * FROM `A` WHERE <ma-clause>");
    Cela fonctionne sans problème.
    J'ai souhaité ensuite modifier un champ des nouvelles entrées ainsi crées dans la table B. J'ai tenté de faire ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("UPDATE `B` SET <mon-champ-a-modifier> WHERE `id`='".mysql_insert_id()."'");
    Mais évidemment en utilisant comme clause mysql_insert_id() seule la dernière ligne copiée dans la table B est modifiée. Or si la requete insert crée plusieurs entrées, je souhaiterai que chacune de ces entrées soient affectées.

    Donc ma question : existe-t-il une ligne de commande à ajouter à ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("INSERT INTO `B` SELECT * FROM `A` WHERE <ma-clause>");
    pour qu'en plus à chaque entrée créée dans la table B, cette entrée ai un champs mis à jour (<mon-champ-a-modifier>) Un truc que j'imagine dans le genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    mysql_query("INSERT INTO `B` SELECT * FROM `A` WHERE <ma-clause> AND `<le-champ-a-modifier-dans-la-derniere-insertion-de-B>`='<la-valeur>'");
    Ou sinon une autre solution...

    merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Par défaut
    Bonjour,

    Comment fait tu cela ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    mysql_query("INSERT INTO `B` SELECT * FROM `A` WHERE <ma-clause>");
     
    mysql_query("UPDATE `B` SET <mon-champ-a-modifier> WHERE `id`='".mysql_insert_id()."'");

    Dans une même boucle ?



    Apres ton 1er insert , fait un select * from A avec un while ou dedans tu mets tes updates.

    Tu as déja essayé ?

    Steven

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Par défaut
    Citation Envoyé par steven78700 Voir le message
    Bonjour,

    Comment fait tu cela ? :

    mysql_query("INSERT INTO `B` SELECT * FROM `A` WHERE <ma-clause>");

    mysql_query("UPDATE `B` SET <mon-champ-a-modifier> WHERE `id`='".mysql_insert_id()."'");


    Dans une même boucle ?


    Steven
    Non je ne le fait pas dans une boucle... En fait je faisais les deux requetes l'une à la suite de l'autre et je me suis apperçu que bien sur le résultat obtenu n'était pas ce que je souhaitais...

    j'ai tenté de faire une boucle genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    $req=mysql_query("ma-requete-de-copie");
     
    while($line=mysql_fetch_row($req)){
           <commande pour ecrire la nouvelle valsuer dans B>
    }
    Mais evidemment j'ai un message d'erreur qui me dit que l'argument de mysql_fetch_row n'est pas bon... j'ai tenté sans y croire et j'avais raison

    je pense que cette solution est sur la bonne piste mais le mysql_fetch_row ne convient pas puisque la requête n'est pas un SELECT. Autrement dit existe-il un truc genre mysql_fetch_row mais permettant de récuperer un résultat de requete de copie...

    Citation Envoyé par steven78700 Voir le message
    Apres ton 1er insert , fait un select * from A avec un while ou dedans tu mets tes updates.
    Non, c'est la table B que je veux ensuite update pour résumer

    - Je veux copier certaines ligne de A vers B mais je ne sais pas à priori combien de lignes seront affectées pour la copie

    - Je me retrouve donc avec x lignes copiées dans B

    - je veux mettre à jour un champ de ces x ligne copiée dans b et cette valeur sera différente du champ correspondant à la même entrée dans la table A

    - Le seul moyen que j'ai d'identifier les lignes copiées dans B c'est leur id auoincrementiel

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 107
    Par défaut
    Une autre idées me vient pour arranger mon problème.

    Si une requête de type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    mysql_query("INSERT INTO `B` SELECT * FROM `A` WHERE <maclause>");
    génère plusieurs insertions dans la table B. Comment récupéré les valeurs du champ auto-increment (disons le champ id) pour chacune de ces nouvelles entrèes ? Car mysql_insert_id ne retourne que le dernier id créé par cette requête. Il me faudrait une sorte de multi_mysql_insert_id

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    59
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 59
    Par défaut
    Peux tu développer quand tu dis que tu veux mettre à jour ton champs ID de la table B stp ?


    Merci

  6. #6
    Expert confirmé
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Par défaut
    Heu...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO tblb SELECT a,b,CONCAT(c, 'peter') FROM tbla WHERE c='hello'

Discussions similaires

  1. Problème de copie d'une machine à l'autre via SSH
    Par junior222 dans le forum Général Java
    Réponses: 2
    Dernier message: 18/08/2014, 14h26
  2. Copie d'une plage à l'autre
    Par hortencia dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 10/11/2011, 00h45
  3. [XL-2003] copie d'une ligne sur autre feuille
    Par sofynet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 22/07/2011, 14h25
  4. [WD14] Mise à jour d'un champ dans une table
    Par forgotten dans le forum WinDev
    Réponses: 2
    Dernier message: 16/03/2011, 10h34
  5. Mise a jour d'un champ dans une base access
    Par FabriceAmex dans le forum IHM
    Réponses: 9
    Dernier message: 10/06/2010, 09h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo