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 :

INSERT INTO entre deux bases [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut INSERT INTO entre deux bases
    Bonjour,

    je vais essayer d'être le plus complet possible pour vous exposer mon problème.

    j'ai deux bases de données sur le même serveur qui ont la même structure.

    j'ai rédigé un script qui me permet de mettre à jour certain champs de certains enregistrements de certaines tables de la bases 2 si ceux ci sont différents de ceux de la bases 1. (vous me suivez ?!)

    Jusque la tout va bien (et c'est déjà pas mal).

    Ensuite suite si ces enregistrement sont absents de la base 2 je souhaiterai les insérer depuis la base 1.

    je sais qu'une requête sous la forme

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO base2.table2 SELECT * FROM base1.table2 WHERE blablabla

    serai idéale mais voila je coince car pas de problème entre deux tables d'une même base mais mes deux tables sont dans deux bases différentes.

    Voici mon code :

    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
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    <?php 
    // Strict update base ES depuis FR
    //info de connexion au deux bases.
    define('DB_SERVER', 'localhost');
    define('DB_SERVER_USERNAME', 'username');
    define('DB_SERVER_PASSWORD', 'motdepasse');
    define('DB_DATABASE_FR', 'base1');
    define('DB_DATABASE_ES', 'base2');
     
    // Connexions au deux bases
    $db_fr = mysql_connect(DB_SERVER , DB_SERVER_USERNAME , DB_SERVER_PASSWORD );
    $db_es = mysql_connect(DB_SERVER , DB_SERVER_USERNAME , DB_SERVER_PASSWORD , true);
     
    mysql_select_db(DB_DATABASE_FR, $db_fr);
    mysql_select_db(DB_DATABASE_ES, $db_es);
     
    //Recherche des enregistrements des produits actifs dans la base FR.
    $query="SELECT * FROM products ORDER BY products_id ASC";
    $result=mysql_query($query,$db_fr); 
    while($datafr = mysql_fetch_assoc($result)) 
        {
        	//verification présence enregistrement identique dans la base ES
     
        	$query_es='SELECT * FROM products WHERE products_id="'.$datafr['products_id'].'"';    	
     
     
            $result_es=mysql_query($query_es,$db_es);
     
    //si le produit existe dans la base ES on met a jour le stock et le prix
    if (mysql_num_rows($result_es) != '0'){ 
     
    // code qui marche et qui n'a aucun intérêt 
     
    }
    //sinon on ajoute le produit à la base ES.
    else { 
     
    $query_insert = 'INSERT INTO base2.products SELECT * FROM base1.products';
    mysql_query($query_insert);
     
    }
    }
     
    ?>
    quelqu'un aurait une idée pour la mise en forme de cette requête.

  2. #2
    Membre éprouvé Avatar de FCYPBA
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    745
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 745
    Points : 952
    Points
    952
    Par défaut
    Salut,

    Vu que tu utlises le même utilisateur entre tes deux connexions, tu peux faire le tout en deux petites requêtes comme tu le montres dans ton exemple.

    Car là en termes de perf, ce n'est pas bon du tout. Peut-être que dans ton cas, les perfs ne sont pas importantes ou problématique mais autant avoir de bons réflexes même sur des petits trucs.

    Un truc du genre :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    update base2.products b2, base1.products b1 set b2.stock=b1.stock,b2.prix=b1.prix
    where b2.product_id=b1.product_id;
     
    insert into base2.products () select * from base1.products where product_id not in (select product_id from base2.products )

    la seconde requête est un peu lourde mais au final le process est plus rapide surtout si la base de produits est importante

    je te laisse voir pour adapter les requêtes en fonction de tes besoins

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur Web
    Inscrit en
    Avril 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Avril 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    bon et bien j'y suis !

    1/ les "-"dans les noms de bases c'est mal !

    2/ Voici la syntaxe qui va bien et mise au propre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $query_insert = 'INSERT INTO '.DB_DATABASE_ES.'.products SELECT * FROM '.DB_DATABASE_FR.'.products';
     
    mysql_query($query_insert, $db_fr) OR die ('Requête de merde'.mysql_error($db_fr));
    A noter que dans mon code initiale et celui si j'ai volontairement viré les conditions de requete (Where blablabla) pour facilité la lecture.

    Ceci n'est valable que parceque je suis sur le même serveur avec le même utilisateur Mysql

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Requête entre deux bases
    Par dcollart dans le forum Informix
    Réponses: 2
    Dernier message: 22/05/2006, 08h54
  2. Changement Des données entre deux bases
    Par Chakib dans le forum Access
    Réponses: 4
    Dernier message: 28/01/2006, 10h59
  3. Réponses: 5
    Dernier message: 30/11/2005, 16h41
  4. Perte de temps entre Deux bases MySQL
    Par ramm50 dans le forum Outils
    Réponses: 7
    Dernier message: 08/09/2005, 09h33
  5. copie de tables entre deux bases
    Par rlgrand dans le forum Débuter
    Réponses: 3
    Dernier message: 27/12/2004, 12h12

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