Insertion de données MYSQL par comparaison entre deux tables

arguul Messages postés 6 Statut Membre -  
JooS Messages postés 2705 Statut Membre -
Bonjour, à toutes et à tous,

J'ai effectué quelques recherches sans trouver de réponse à mon problème, ainsi j'espère ne pas poster ici de doublon.

Voici mon problème,
J'ai deux tables MySQL de structures différentes, l'une avec les champs 'product_id' et 'price1', l'autre avec 'product_id' et 'price2'. Les champs 'product_id' sont rempli pour les deux tables, mais pas dans le même ordre, et la colonne 'price2' est vide.

Je souhaiterais récupérer les données 'price1' et les insérer dans le champs 'price2' de ma seconde table, en respectant la correspondance avec le 'product_id' de la première table.

Existe-t-il une requête MySQL permettant cette opération, ou bien un script PHP qui permettrait d'automatiser ces insertions.

Merci par avance à celles ou ceux qui prêteront attention à ce message.

Cordialement.

10 réponses

  1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    à vue de nez, quelque chose dans ce goût là devrait le faire :

    //connexion à la bdd 
    
    $req1 = "SELECT id, price FROM table1"; 
    $res1 = mysql_query($req1); 
    while (list($id, $price) = mysql_fetch_row($res1)) { 
      $req2 = "UPDATE table2 SET price2='$price' WHERE product_id='$id'"; 
      $res2 = mysql_query($req2); 
    }


    je pense même que c'est faisable en une seule requête...
    1
  2. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    en une seule requête :

    UPDATE table2 SET price2=(SELECT price1 FROM table1 WHERE table1.product_id = table2.product_id)
    1
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      tu peux faire ça directement dans phpmyadmin, pas besoin d'aller te fatiguer avec php
      0
  3. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
     
    Pourquoi tu n'ajoutes pas le champs price2 dans ta 1ère table tout simplement ?
    0
  4. mandolorien Messages postés 115 Statut Membre 3
     
    C est effectivement compliquer a faire mais faisable ,je t eexplique il y a forcement 1 des tables dans laqulles tu es constament conncter , et bien quand tu fait l insertion des données dans la table 1 , tu verifie en php si elle a etait executé , si c est le cas tu creer une nouvelle connection a distance avec les les differentes variables puis tu referme la connexion des que la deuxieme insertions c est effectuer :)
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. arguul Messages postés 6 Statut Membre
     
    Merci pour la rapidité de vos réponses,

    @ThEBiShOp: en fait j'ai besoin que les deux tables restent séparées, j'ai simplifié pour expliquer mon problème, mais chacune des deux tables possède une dizaine de champs différents, et on en commun le champs 'product_id'.

    @mandolorien: c'est effectivement ce que j'ai mis en place pour les saisies futures, mais j'ai déjà 2500 insertions dans ces tables, et je cherche un moyen de récupérer la valeur 'price1' pour l'intégrer dans 'price2' en fonction du 'product_id' (qui est déjà renseigné dans ma deuxième table).

    Cordialement.
    0
  7. Profil bloqué
     
    pourquoi sur phpmyadmin, ne pas duppliquer ta table
    puis renommer price1 en price2 ?
    en 30 secondes c'est fait.
    0
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      visiblement il a d'autres champs, j'imagine que ces champs sont différents
      0
  8. A.Nonymous
     
    UPDATE table2
    INNER JOIN table1 on table2.product_id = table1.product_id
    SET table2.price2 = table1.price1

    Ajouter un
    WHERE table2.price2 IS NULL
    peut être utile
    0
  9. maka54 Messages postés 721 Statut Membre 80
     
    INSERT INTO table2 ( product_id , price2 )
    SELECT product_id, price1 FROM table1
    ON DUPLICATE KEY UPDATE price2 = price1

    product_id doit bien evidémment être un clé unique
    0
  10. JooS Messages postés 2705 Statut Membre 228
     
    Salut,
    Je dirais que ceci devrait fonctionner ...
    UPDATE table2, table1 
    SET table2.price2 = table1.price1 
    WHERE table2.product_id = table1.product_id
    0
  11. mandolorien Messages postés 115 Statut Membre 3
     
    // voila comment je vois la chose
    /*****************************************************
     *				CONNEXION BDD / PDO                  *
     ****************************************************/
    try
    {
    	// On crée la connexion avec la base de données
    	$db = new PDO('mysql:host=localhost;dbname=table1','root','');
    	$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    	$db->exec('SET NAMES UTF8');
    }
    catch(PDOException $e)
    {
    	// Oups !!! On a rencontré un problème
    	die("Error : " . $e->getMessage());
    }
    
    //On recupere les données de la table 1
    $Connect = $db->prepare("SELECT * FROM table1");
    $Connect->execute();
    $unConnects=$Connect->fetchAll();
    $retourneresultat=$Connect->rowCount();
    if($retourneresultat = 1)
    {
    	try
    	{
    		// On crée la connexion avec la base de données
    		$db2 = new PDO('mysql:host=localhost;dbname=table2','root','');
    		$db2->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    		$db2->exec('SET NAMES UTF8');
    	}
    	catch(PDOException $e)
    	{
    		// Oups !!! On a rencontré un problème
    		die("Error : " . $e->getMessage());
    	}
    	foreach($unConnects as $AffununConnects)
    	{
    		// requete pour savoir si l'utilisateur existe
    		$insert = $db2->prepare('INSERT INTO table2 ('price2') VALUES(:price2) WHERE 'product_id'=:product_id');
    		$insert->bindParam(':price2', $AffununConnects['price1']);
    		$insert->bindParam(':product_id',$AffununConnects['product_id']);
    		$insert->execute();
    		$utilresultat=$insert->rowCount();
    	}
    }
    

    -2
    1. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      Tout ça pour un bête update ?
      0
    2. mandolorien Messages postés 115 Statut Membre 3
       
      un bête update , n'est pas forcement bête pour les codeurs confirmé(e)s de plus c'est pas un update mais un insert ;)
      0
    3. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      donc en gros, t'as pas du tout compris ce qu'il essayait de faire, c'est ça ?
      0
    4. mandolorien Messages postés 115 Statut Membre 3
       
      je cite :je cherche un moyen de récupérer la valeur 'price1' pour l'intégrer dans 'price2' en fonction du 'product_id' (qui est déjà renseigné dans ma deuxième table).

      c'est ce que j'ai respecté NON ???
      0
    5. ThEBiShOp Messages postés 9307 Date d'inscription   Statut Contributeur Dernière intervention   1 606
       
      la seconde table possède déjà le champ product_id avec les mêmes données que la première table, ça ne risque donc pas d'être un insert, mais je dis ça, je dis rien, je ne suis pas un codeur confirmé moi.
      0