Insertion de données MYSQL par comparaison entre deux tables

Fermé
arguul Messages postés 6 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 11 février 2013 - 11 févr. 2013 à 14:13
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 - 12 févr. 2013 à 22:23
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.


A voir également:

10 réponses

ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
Modifié par ThEBiShOp le 11/02/2013 à 15:21
à 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
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
11 févr. 2013 à 15:29
en une seule requête :

UPDATE table2 SET price2=(SELECT price1 FROM table1 WHERE table1.product_id = table2.product_id)
1
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
11 févr. 2013 à 15:43
tu peux faire ça directement dans phpmyadmin, pas besoin d'aller te fatiguer avec php
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
11 févr. 2013 à 14:28
Pourquoi tu n'ajoutes pas le champs price2 dans ta 1ère table tout simplement ?
0
mandolorien Messages postés 109 Date d'inscription dimanche 9 septembre 2012 Statut Membre Dernière intervention 9 mars 2018 3
11 févr. 2013 à 14:51
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
arguul Messages postés 6 Date d'inscription lundi 9 février 2009 Statut Membre Dernière intervention 11 février 2013
11 févr. 2013 à 15:12
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
Profil bloqué
11 févr. 2013 à 16:00
pourquoi sur phpmyadmin, ne pas duppliquer ta table
puis renommer price1 en price2 ?
en 30 secondes c'est fait.
0
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
11 févr. 2013 à 16:01
visiblement il a d'autres champs, j'imagine que ces champs sont différents
0
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
maka54 Messages postés 699 Date d'inscription mercredi 8 avril 2009 Statut Membre Dernière intervention 4 décembre 2016 80
12 févr. 2013 à 11:15
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
JooS Messages postés 2465 Date d'inscription mardi 22 janvier 2008 Statut Membre Dernière intervention 8 juin 2016 228
12 févr. 2013 à 22:23
Salut,
Je dirais que ceci devrait fonctionner ...
UPDATE table2, table1 
SET table2.price2 = table1.price1 
WHERE table2.product_id = table1.product_id
0
mandolorien Messages postés 109 Date d'inscription dimanche 9 septembre 2012 Statut Membre Dernière intervention 9 mars 2018 3
11 févr. 2013 à 15:39
// 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
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
11 févr. 2013 à 15:43
Tout ça pour un bête update ?
0
mandolorien Messages postés 109 Date d'inscription dimanche 9 septembre 2012 Statut Membre Dernière intervention 9 mars 2018 3
11 févr. 2013 à 16:22
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
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
11 févr. 2013 à 16:24
donc en gros, t'as pas du tout compris ce qu'il essayait de faire, c'est ça ?
0
mandolorien Messages postés 109 Date d'inscription dimanche 9 septembre 2012 Statut Membre Dernière intervention 9 mars 2018 3
11 févr. 2013 à 17:21
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
ThEBiShOp Messages postés 8378 Date d'inscription jeudi 22 mars 2007 Statut Contributeur Dernière intervention 8 février 2021 1 565
11 févr. 2013 à 22:34
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