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 :

Lecture sequentielle deux tables et mise a jour


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    FoxLeRenard
    Invité(e)
    Par défaut Lecture sequentielle deux tables et mise a jour
    Bonjour,

    Avec MySql,
    j' ais deux tables table1 et table2
    je doit en lisant table1, récupérer data par data une valeur de table2
    et mettre a jour table1.

    la table "table1" contient parmis ses variables ,
    une variable "lavalx" qui n 'est pas une clée
    une variable "lavxnum" qui n 'est pas une clée

    la table "table2" contient parmis ses variables ,
    une variable clée "tbl2index" qui corespond a "lavxnum" de la "table1"
    une variable "tblvaleur" que je dois récupérer pour mettre a jour "table1"

    Ma question est , comment ecrire ça ?

    je croyais que c'était comme cela, mais apparament ça ne marche pas ??

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     $Flag1=mysql_connect($Serveur,$User,$Mdp);
     $Flag2=mysql_select_db($MaBase);
     $result=mysql_query( "select * table1
             WHERE  lavxnum >= 0 and lavxnum <= 99999
             ORDER BY lavxnum");
     
    while ($row=mysql_fetch_array($result)) 
      {
         $lavxnum= stripslashes($row['lavxnum']);
         $lavx= stripslashes($row['lavx']);
         // 1) donc pour chaque data je doit lire la table2 a l aide de lavxnum=tbl2index
         // 2) recuperer dans table2 sa valeur tblvaleur
         // 3) réécrire dans table1 pour l'enregistrement encour, lavalx=tblvaleur
     
     
      }
         mysql_close();
    Une idée ?
    Mille mercis d'avance
    Dernière modification par julp ; 20/12/2008 à 18h32. Motif: merci d'employer les balises [code] (bouton # de l'éditeur)

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Août 2002
    Messages
    1 060
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 1 060
    Par défaut
    Bonjour,

    Quelque chose dans ce genre devrait pouvoir faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
      $sql = 'REPLACE INTO table1 (lavlx)
              SELECT tblvaleur 
              FROM table2
              WHERE tbl2index = lavxnum';
    ?>
    à condition qu'aucun champ ne soit utilisé comme clé étrangère.
    http://dev.mysql.com/doc/refman/5.0/fr/replace.html

  3. #3
    FoxLeRenard
    Invité(e)
    Par défaut
    Whaou Mille mercis Jeca !

    Je penses tester ça un peut tard cette nuit, ou demain matin
    je te tiens au courant, mais je sent que ça va le faire

    Sympa d'aider même le Dimanche !!

  4. #4
    FoxLeRenard
    Invité(e)
    Par défaut
    Pffffffffff ... ca ne marche pas

    Alors il faut que je remplisse une table (ARAY)
    puis la deuxieme
    et enfin le traitement !! DUR DUR

    Merci quand même

  5. #5
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 059
    Par défaut
    Bonjour,

    Et pourtant, c'est faisable en une seule requête de mise à jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE table1, table2
    SET table1.lavalx = table2.tblvaleur
    WHERE table1.lavxnum = table2.tbl2index
    Attention, cette syntaxe est propre à MySQL, et pour les versions supérieures à la 4.0.4.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  6. #6
    FoxLeRenard
    Invité(e)
    Par défaut
    Mille mercis CED !!

    Je sens que c'est la bonne démarche, mais trop faible encore,
    je suis perturbé par le fait que, plusieurs datas de table1 ont la même
    valeur tbl2index, je veux dire que (comme je l'avais dit)
    tbl2index est bien une clé unique de table2, mais sa valeur dans table1
    s'appelle lavxnum est une valeur ordinaire, pas une clé unique

    J'ai en effet traduit ton conseil comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    $Flag1=mysql_connect($Serveur,$User,$Mdp);
    $Flag2=mysql_select_db($MaBase);
    $result=mysql_query( "select * table1
    WHERE lavxnum >= 0 and lavxnum <= 99999
    ORDER BY lavxnum");
     
    while ($row=mysql_fetch_array($result)) 
    {
    $lavxnum= stripslashes($row['lavxnum']);
    $lavx= stripslashes($row['lavx']);
     
    $moncontrol=mysql_query( "UPDATE table1, table2
    SET table1.lavalx = table2.tblvaleur
    WHERE table1.lavxnum = table2.tbl2index");
    }
    mysql_close();
    Alors ça marchera quand même ?

    Merci encore et excuses le débutant ...
    Dernière modification par julp ; 20/12/2008 à 18h34. Motif: merci d'employer les balises [code] (bouton # de l'éditeur)

  7. #7
    FoxLeRenard
    Invité(e)
    Par défaut
    Citation Envoyé par ced Voir le message
    Bonjour,

    Et pourtant, c'est faisable en une seule requête de mise à jour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    UPDATE table1, table2
    SET table1.lavalx = table2.tblvaleur
    WHERE table1.lavxnum = table2.tbl2index
    Attention, cette syntaxe est propre à MySQL, et pour les versions supérieures à la 4.0.4.

    ced
    N' ayant toujours pas résolu mon probléme,
    je me rattache a ta solution, mais ce que je crois en comprendre,
    c' est que tu mets avec cela, UN data a jour et c'est bien ce que je veuix faire sauf que je souhaite le faire pour toute la table1 !!

    C' est pour cela que depuis le début j'essaies d' inclure ta syntaxe DANS
    un while de SELECT * Pffffffff .... dur dur

Discussions similaires

  1. [SQL-Server] Lecture dans deux tables différentes
    Par Invité dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 05/11/2012, 12h44
  2. Lecture de deux table pour un même resultat
    Par wilituning dans le forum Requêtes
    Réponses: 17
    Dernier message: 25/02/2010, 09h58
  3. [MySQL] Mise à jour simultanée dans deux tables
    Par IGalaxy dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/04/2009, 20h26
  4. requete mise à jour à deux tables
    Par gberthier dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 19/03/2008, 08h58
  5. mise à jour automatique entre deux table
    Par debutantasp dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/02/2008, 11h00

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