Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 03/02/2010, 11h06   #1
Membre du Club
 
Date d'inscription: mars 2009
Messages: 108
Par défaut Requête retournant résultat inattendu

Bonjour,

J'utilise 2 tables

Je rapatrie le contenu d'un fichier CSV vers la table "mailrse", je rempli le champ "mail_rse.Agence" en executant la requête "$eXtractAgence".

Voilà la strucuture des 2 tables que j'utilise:

Code :
CREATE TABLE `equipmt_region` (
  `equipement` varchar(15) NOT NULL,
  `region` varchar(4) NOT NULL,
  UNIQUE KEY `equipement` (`equipement`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
 
CREATE TABLE `mailrse` (
  `site` varchar(10) NOT NULL,
  `parent` varchar(10) NOT NULL,
  `Auteur` varchar(20) NOT NULL,
  `Type` text NOT NULL,
  `date` varchar(20) NOT NULL,
  `Commentaire` text NOT NULL,
  `Region` varchar(20) NOT NULL,
  `Agence` varchar(20) NOT NULL,
  `motif` text NOT NULL,
  `num_evt` varchar(20) NOT NULL,
  KEY `site` (`site`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
Voilà mon code PHP:

Code :
$fichier = fopen("monFichier.CSV","r"); 
//tant qu'on est pas a la fin du fichier :
while (!feof($fichier))
{ 
	/* variable pour avoir la taille de ligne */
	$tailleLigne = 0;
	// On recupere toute la ligne
	$uneLigne = fgets($fichier);
	$tailleLigne = strlen($uneLigne);
	$uneLigne = substr($uneLigne,1,$tailleLigne-4);
 
	//On met dans un tableau les differentes valeurs trouvés (ici séparées par un '","')
	$tableauValeurs = explode(";", $uneLigne);
	
	$eXtractAgenceSQL= mysql_query('SELECT equipmt_region.region FROM equipmt_region, mailrse 
		WHERE mailrse.site=equipmt_region.equipement
		OR mailrse.parent=equipmt_region.equipement');
	$eXtractAgence=mysql_fetch_row($eXtractAgenceSQL);
	
	// On  crée la requete pour inserer les donner (ici il y a 5 champs donc de [0] a [4])
	if($tableauValeurs[0]!=""){
		mysql_query("INSERT INTO mailrse (site,parent,Auteur,Type,date,Commentaire,Region,Agence,motif,num_evt) 
		VALUES (\"$tableauValeurs[4]\",\"$tableauValeurs[6]\",\"$tableauValeurs[11]\",\"$tableauValeurs[1]\",\"$tableauValeurs[9]\",
		\"$tableauValeurs[12]\",\"$tableauValeurs[7]\",\"$eXtractAgence[0]\",\"$tableauValeurs[13]\",\"$tableauValeurs[0]\")"); 
	}
}
Le problème que je rencontre actuellement c'est que le champs "mailrse.Agence" est rempli n'importe comment.

Exemple:
Code :
INSERT INTO `mailrse` (`site`, `parent`, `Auteur`, `Type`, `date`, `Commentaire`, `Region`, `Agence`, `motif`, `num_evt`) VALUES 
('C20195B', 'S20195', 'toto', 'Coupure, '22/01/2010 09:51', '1025250', '', 'IDF', '', 'VT00001892');
Alors que dans la table "equipmt_region", S20195 a pour agence MED, c'est à dire:
Code :
INSERT INTO `equipmt_region` (`equipement`, `region`) VALUES ('S20195', 'MED');
En gros, le résultat de la requête doit donner ça :
Code :
('C20195B', 'S20195', 'toto', 'Coupure, '22/01/2010 09:51', '1025250', '', 'MED', '', 'VT00001892');
et pas ça:
Code :
('C20195B', 'S20195', 'toto', 'Coupure, '22/01/2010 09:51', '1025250', '', 'IDF', '', 'VT00001892');
Merci de votre aide.
aiss57 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/02/2010, 12h22   #2
Membre à l'essai
 
Date d'inscription: avril 2009
Localisation: 69
Messages: 40
Par défaut

Tu as vérifié la valeur de $eXtractAgence[0] ?
Tu es sur que celle-ci correspond bien à ce que tu attends ?
Sinon personnellement je ne vois pas
DjiLow est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 03/02/2010, 13h12   #3
Membre du Club
 
Date d'inscription: mars 2009
Messages: 108
Par défaut

Citation:
Envoyé par DjiLow Voir le message
Tu as vérifié la valeur de $eXtractAgence[0] ?
$eXtractAgence[0] me retourne le champ "equipmt_region.region", sauf que pour "S20195" le résultat doit être "MED" et pas "IDF"
Citation:
Envoyé par DjiLow Voir le message
Tu es sur que celle-ci correspond bien à ce que tu attends ?
C'est bien le champ que je souhaite mais pas la bonne valeur quoi.
aiss57 est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/02/2010, 08h50   #4
Membre à l'essai
 
Date d'inscription: avril 2009
Localisation: 69
Messages: 40
Par défaut

Bon alors je reformule ma question
Quel valeur récupère tu dans $eXtractAgence[0] ? Peut tu l'afficher ?
Si cette valeur comme tu dis ne correspond pas à ce que tu attends c'est que le problème se situe dans ta base de données lors de l'enregistrement soit dans la requête que tu passe à ta base de données pour récupérer cette valeur
DjiLow est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/02/2010, 09h47   #5
Expert Confirmé
 
Avatar de Fench
 
Date d'inscription: mai 2002
Localisation: Auvergne
Messages: 1 567
Par défaut

Bonjour,

Tu verras bien en fonction de la valeur $eXtractAgence[0] que Djilow te demandes d'afficher ...

Sinon, je ne ferais pas ta requête comme celà (les jointures sur les where sont plutôt à modifier par le mot clé JOIN) et puis ensuite tu fais ton OR.

De même faire des clés sur des chaîne c possible mais plus long dans les requêtes (et puis moi je trouve pas celà trop clair) de plus tu fais des recherches sur des chaînes de longueurs différentes ...

Voilà comment, je ferais (a toi de voir ensuite), création d'un id sur chaque table (id_equip sur equipement et id_mail sur mailrse) puis la requête
Code :
 
 $eXtractAgenceSQL= mysql_query('SELECT equipmt_region.region 
         FROM equipmt_region E 
         INNER JOIN mailrse M
         ON E.id_equip = M.id_mail
         WHERE M.site=E.equipement
         OR M.parent=E.equipement');
 
En dernier si tu ne peux rien changer sur les structures dans ce cas tu fais une UNION sur ta jointure en where (une avec mailrse.site=equipmt_region.equipement l'autre avec mailrse.parent=equipmt_region.equipement
__________________
Actuellement AI à l'INRA
fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)
Fench est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 04/03/2010, 12h35   #6
Membre du Club
 
Date d'inscription: mars 2009
Messages: 108
Par défaut

Finalement j'ai résolu mon pb en exécutant 2 requêtes successives. C'est peut être lourd mais ça résoud le pb

Code :
	if($tableauValeurs[0]!=""){
		mysql_query("INSERT INTO mailrse (site,parent,Auteur,Type,date,Commentaire,Region,Agence,motif,num_evt) 
		VALUES (\"$tableauValeurs[4]\",\"$tableauValeurs[6]\",\"$tableauValeurs[11]\",\"$tableauValeurs[1]\",\"$tableauValeurs[9]\",
		\"$tableauValeurs[12]\",\"$tableauValeurs[7]\",\"\",\"$tableauValeurs[13]\",\"$tableauValeurs[0]\")"); 
	}
	
}
	
	$eXtractAgenceSQL= "UPDATE mailrse
									SET Agence =(
												SELECT region 
												FROM equipmt_region
												WHERE equipmt_region.equipement = mailrse.parent
												OR equipmt_region.equipement = mailrse.Site)";	
												
	$eXtractAgence=mysql_query($eXtractAgenceSQL);
Je clôture le POST. Merci de votre aide.

Cordialement.
aiss57 est déconnecté   Envoyer un message privé Réponse avec citation
NEWS PHPFAQ PHPCours PHPSources PHPLivres PHPScripts PHPOutils PHPComparatifsZend Framework

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 14h41.


Vos questions techniques : forum d'entraide PHP - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.