IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Requête retournant résultat inattendu [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Points : 49
    Points
    49
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO `equipmt_region` (`equipement`, `region`) VALUES ('S20195', 'MED');
    En gros, le résultat de la requête doit donner ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('C20195B', 'S20195', 'toto', 'Coupure, '22/01/2010 09:51', '1025250', '', 'MED', '', 'VT00001892');
    et pas ça:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ('C20195B', 'S20195', 'toto', 'Coupure, '22/01/2010 09:51', '1025250', '', 'IDF', '', 'VT00001892');
    Merci de votre aide.

  2. #2
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Points : 148
    Points
    148
    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

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Points : 49
    Points
    49
    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.

  4. #4
    Membre habitué
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2009
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2009
    Messages : 195
    Points : 148
    Points
    148
    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

  5. #5
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 91
    Points : 49
    Points
    49
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MYSQL] Requète au résultat inattendu
    Par feralp dans le forum Langage SQL
    Réponses: 4
    Dernier message: 12/01/2010, 19h17
  2. requête retournant résultat d'une fonction stockée
    Par schnock dans le forum Langage SQL
    Réponses: 2
    Dernier message: 23/01/2009, 15h36
  3. Comment savoir si une requête retourne un résultat
    Par tomy29 dans le forum Hibernate
    Réponses: 2
    Dernier message: 06/11/2008, 11h18
  4. retourner zero sur une requète sans résultat
    Par kelek33 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 04/10/2007, 17h27
  5. Savoir si une requête retourne un résultat ou pas
    Par zut94 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 30/09/2005, 16h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo