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
Futur Membre du Club
 
Inscription : mars 2009
Messages : 91
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 91
Points : 19
Points : 19
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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 :
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
$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 :
1
2
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 00
Vieux 03/02/2010, 12h22   #2
Membre habitué
 
Étudiant
Inscription : avril 2009
Messages : 159
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 159
Points : 103
Points : 103
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 00
Vieux 03/02/2010, 13h12   #3
Futur Membre du Club
 
Inscription : mars 2009
Messages : 91
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 91
Points : 19
Points : 19
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 00
Vieux 04/02/2010, 08h50   #4
Membre habitué
 
Étudiant
Inscription : avril 2009
Messages : 159
Détails du profil
Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : avril 2009
Messages : 159
Points : 103
Points : 103
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 00
Vieux 04/02/2010, 09h47   #5
Membre Expert
 
Avatar de Fench
 
Inscription : mai 2002
Messages : 1 570
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : mai 2002
Messages : 1 570
Points : 1 703
Points : 1 703
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 :
1
2
3
4
5
6
7
 
 $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 00
Vieux 04/03/2010, 12h35   #6
Futur Membre du Club
 
Inscription : mars 2009
Messages : 91
Détails du profil
Informations forums :
Inscription : mars 2009
Messages : 91
Points : 19
Points : 19
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 :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
	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 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 04h24.


 
 
 
 
Partenaires

Hébergement Web