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 :

Clause WHERE non prise en compte ou problème de dates ? [Oracle]


Sujet :

PHP & Base de données

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut Clause WHERE non prise en compte ou problème de dates ?
    Bonjour,

    j'ai un petit problème avec l'exécution d'une requête attaquant une base Oracle dans un script PHP.

    Voici le bout de code qui construit la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $requete = "SELECT TRAITEMENT, ".$type_req." as VAL FROM XXCC.XXCC_ALR_GTS WHERE trunc(completion_date, '".$trunc."') 
     
    = trunc (to_date('01/".$mois_req."/".$annee."', 'DD/MM/YYYY'), '".$trunc."') group by TRAITEMENT order by VAL";
     
    $s = OCIParse($conn, $requete);
     
    OCIExecute($s, OCI_DEFAULT);
    Si je l'affiche pour m'assurer qu'elle a bien été construite, j'obtiens par exemple :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT TRAITEMENT, AVG(DUREE_MOY) as VAL FROM XXCC.XXCC_ALR_GTS WHERE trunc(completion_date, 'Month') = trunc (to_date('01/5/2007', 'DD/MM/YYYY'), 'Month') group by TRAITEMENT order by VAL

    ... ce qui semble correct. Tout du moins, lorsque je l'exécute dans un requêteur (en l'occurence TOAD), j'ai le bon résultat (dans mon cas, 64 rows).


    Puis vient ma petite boucle pour récupérer ces lignes dans PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $data = array();
    $legends = array();
     
    while (OCIFetch($s)) {
    	array_push($data, ociresult($s, "VAL"));
    	array_push($legends, ociresult($s, "TRAITEMENT"));
    }
    Et là (oui, c'est le drame) $data et $legends contiennent chacun environ 250 éléments : exactement comme si la clause WHERE n'avait pas été prise en compte.

    Je fais mes premiers pas dans le monde PHP/Oracle, peut-être y a-t-il quelque chose que j'ignore à propos de la gestion des dates, quelque chose qui marche directement sur la base mais pas via PHP, ou je ne sais quoi encore ?

    Si quelqu'un a une idée





    Quelques petites infos au cas où : je développe sur EasyPHP 1.8, qui inclut PHP 4.3.1 je crois ; j'ai rajouté l'extension php_oci8.dll. Le but du WHERE est de sélectionner les lignes dont la date correspond à un mois et/ou une année donnée, j'utilise trunc car j'ai trouvé ça quelque part mais peut-être y a-t-il une meilleure façon de faire ?

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    J'ai modifié ma requête de plusieurs manières, en particulier de la façon suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    $requete = "SELECT TRAITEMENT, ".$type_req." as VAL 
    FROM XXCC.XXCC_ALR_GTS 
    WHERE to_char(completion_date, 'YYYYMM') = '".$annee.$mois_req."' 
    group by TRAITEMENT 
    order by VAL";
     
    $s = OCIParse($conn, $requete);
     
    OCIExecute($s, OCI_DEFAULT);
    ... qui revient à :
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT TRAITEMENT, AVG(DUREE_MOY) as VAL 
    FROM XXCC.XXCC_ALR_GTS 
    WHERE to_char(completion_date, 'YYYYMM') = '200705' 
    group by TRAITEMENT 
    order by VAL

    ...ce qui semble très bien. L'exécution dans TOAD me retourne bien seulement 64 lignes. Il s'agit donc là d'une comparaison de chaînes et non de dates (?).

    Pourtant, il y a toujours 226 éléments dans mes arrays par la suite (soit le nombre de lignes obtenus sans le WHERE).


    ... comprends pô

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

    Informations forums :
    Inscription : Mars 2005
    Messages : 10
    Points : 7
    Points
    7
    Par défaut
    Bon, j'ai trifouillé avec les opérateurs de comparaison, remplacé mon = par des <=, >=, LIKE, etc.

    Au bout d'un moment j'ai remis = et ça a commencé à marcher. La requête est pourtant exactement la même... Peut être un problème de cache, je sais pas :/

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

Discussions similaires

  1. clause du WHERE non prise en compte
    Par HAbroc dans le forum Requêtes
    Réponses: 5
    Dernier message: 03/09/2012, 21h25
  2. Réponses: 5
    Dernier message: 20/10/2008, 20h59
  3. clause where non pris en compte
    Par zulkifli dans le forum Requêtes
    Réponses: 4
    Dernier message: 31/08/2006, 14h41
  4. [netbeans] Modifications non prises en compte
    Par nadass dans le forum NetBeans
    Réponses: 6
    Dernier message: 07/04/2005, 13h49
  5. Lecture de fichier - dernière ligne non prise en compte
    Par JulienPles dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 16/03/2005, 11h57

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