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.


A voir également:

10 réponses

ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
à 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 9307 Statut Contributeur 1 566
 
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 9307 Statut Contributeur 1 566
 
tu peux faire ça directement dans phpmyadmin, pas besoin d'aller te fatiguer avec php
0
ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
Pourquoi tu n'ajoutes pas le champs price2 dans ta 1ère table tout simplement ?
0
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

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

Posez votre question
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
Profil bloqué
 
pourquoi sur phpmyadmin, ne pas duppliquer ta table
puis renommer price1 en price2 ?
en 30 secondes c'est fait.
0
ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
visiblement il a d'autres champs, j'imagine que ces champs sont différents
0
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
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
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
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
ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
Tout ça pour un bête update ?
0
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
ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
donc en gros, t'as pas du tout compris ce qu'il essayait de faire, c'est ça ?
0
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
ThEBiShOp Messages postés 9307 Statut Contributeur 1 566
 
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