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 :

[Doctrine] Problème requete complexe


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 23
    Par défaut [Doctrine] Problème requete complexe
    Bonjour,

    Débutant avec symfony et Doctrine, je cherche à mettre en place une requête complexe, jusque ici sans succès. Pour le détail, la requête finale doit aller chercher, dans 3 schémas répartis sur 2 bases différentes, un bon nombre de champs. Mais le souci, c'est que déjà avec une première version sur deux schéma d'une même base, je suis incapable d'executer la requete correctement avec symfony et doctrine.

    Voila la requete en SQL:
    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
    27
    28
    29
    30
    31
    32
    33
    SELECT PROJET_SIGIP.IDPROJET,
      PROJET_SIGIP.IDORG, 
      PROJET_SIGIP.LIBPROJET, 
      PROJET_SIGIP.DESCRIPTION, 
      PROJET_SIGIP.ENJEUX, 
      PROJET_SIGIP.RISQUE, 
      PROJET_SIGIP.CRITICITE, 
      PROJET_SIGIP.POURCENTAGE_REALISE, 
      PROJET_SIGIP.RISQUES_CONTRAINTES, 
      PROJET_SIGIP.DTDEB, 
      PROJET_SIGIP.DTDEBREEL, 
      PROJET_SIGIP.DTFIN, 
      PROJET_SIGIP.DTFINREEL, 
      (SELECT TT.LIBELLE FROM gipsi.TABLE_TYPE TT, gipsi.TABLE_TYPE TT2 WHERE TT.NOMCOLONNE = 'TYPDOM' and TT.PARAM1 = 'SIGIP' and TT2.PARAM2 = TT.CODTYPE AND TT2.CODTYPE = PROJET_SIGIP.TYPPI) "dom",
      (SELECT TT.LIBELLE FROM gipsi.TABLE_TYPE TT WHERE NOMCOLONNE = 'TYPPI' and PARAM1 = 'SIGIP' and CODTYPE = PROJET_SIGIP.TYPPI)"ppi", 
      (SELECT S.NOM FROM gipsi.SERVICE S WHERE TYPSERV = 'SPHER' and IDORG = PROJET_SIGIP.IDORG and IDSERV = PROJET_SIGIP.TYPSPHERE)"sphere", 
      (SELECT TT.LIBELLE FROM gipsi.TABLE_TYPE TT WHERE NOMCOLONNE = 'TYPCIBLE' and PARAM1 = 'SIGIP' and CODTYPE = PROJET_SIGIP.TYPCIBLE)"typcible", 
      PROJET_SIGIP.OBSERVATIONS, 
      PROJET_SIGIP.MOTCLE,
      DATE_METEO.DTMETEO, 
      DATE_METEO.TYPMETEO, 
      TT.LIBELLE,
      DATE_METEO.OBS,
      DATE_METEO.MARQUANT
    FROM PROJET_SIGIP PROJET_SIGIP, UTIL UTIL, DATE_METEO DATE_METEO, GIPSI.TABLE_TYPE TT
    Where UTIL.USERNAME = 'user'
    AND UTIL.TYPDOM = PROJET_SIGIP.TYPDOM
    AND (UTIL.TYPPI = PROJET_SIGIP.TYPPI OR UTIL.TYPPI IS NULL)
    AND DATE_METEO.IDPROJET = PROJET_SIGIP.IDPROJET
      and TT.NOMCOLONNE = 'TYPMETEO'
      and TT.PARAM1 = 'SIGIP'
      and TT.CODTYPE = DATE_METEO.TYPMETEO
      and (DATE_METEO.MARQUANT=1 or DATE_METEO.DTMETEO=(SELECT MAX(DTMETEO) FROM DATE_METEO WHERE IDPROJET = PROJET_SIGIP.IDPROJET))
    J'ai bien essayé de faire un genre de :
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    $query=Doctrine_Query::create()
    	-> select ('PROJET_SIGIP.IDPROJET',
      'PROJET_SIGIP.IDORG', 
      'PROJET_SIGIP.LIBPROJET', 
      'PROJET_SIGIP.DESCRIPTION', 
      'PROJET_SIGIP.ENJEUX', 
      'PROJET_SIGIP.RISQUE', 
      'PROJET_SIGIP.CRITICITE', 
      'PROJET_SIGIP.POURCENTAGE_REALISE', 
      'PROJET_SIGIP.RISQUES_CONTRAINTES', 
      'PROJET_SIGIP.DTDEB', 
      'PROJET_SIGIP.DTDEBREEL', 
      'PROJET_SIGIP.DTFIN', 
      'PROJET_SIGIP.DTFINREEL', 
      (Select ('TT.LIBELLE') ->from ('gipsi.TABLE_TYPE TT', 'gipsi.TABLE_TYPE TT2') ->where ('TT.NOMCOLONNE = ?','TYPDOM') ->andWhere ('TT.PARAM1 = ?','SIGIP') ->andWhere ('TT2.PARAM2 = ?','TT.CODTYPE') ->andWhere ('TT2.CODTYPE = ?','PROJET_SIGIP.TYPPI')),
      (select ('TT.LIBELLE') ->from ('gipsi.TABLE_TYPE TT') ->Where ('NOMCOLONNE = ?','TYPPI') ->andWhere ('PARAM1 = ?', 'SIGIP') ->andWhere ('CODTYPE = ?','PROJET_SIGIP.TYPPI')), 
      (select ('S.NOM') ->from ('gipsi.SERVICE S') ->Where ('TYPSERV = ?','SPHER') ->andWhere ('IDORG = ?','PROJET_SIGIP.IDORG') ->andWhere ('IDSERV = ?','PROJET_SIGIP.TYPSPHERE')), 
      (select ('TT.LIBELLE') ->from ('gipsi.TABLE_TYPE TT') ->where ('NOMCOLONNE = ?','TYPCIBLE') ->andWhere ('PARAM1 = ?','SIGIP') ->andWhere ('CODTYPE = ?','PROJET_SIGIP.TYPCIBLE')), 
      'PROJET_SIGIP.OBSERVATIONS', 
      'PROJET_SIGIP.MOTCLE',
      'DATE_METEO.DTMETEO', 
      'DATE_METEO.TYPMETEO', 
      'TT.LIBELLE',
      'DATE_METEO.OBS',
      'DATE_METEO.MARQUANT')
      ->from('PROJET_SIGIP PROJET_SIGIP', 'UTIL UTIL', 'DATE_METEO DATE_METEO', 'GIPSI.TABLE_TYPE TT')
      ->Where('UTIL.TYPDOM = ?','PROJET_SIGIP.TYPDOM')
      ->andWhere('UTIL.TYPPI = ?','PROJET_SIGIP.TYPPI') ->orWhere ('UTIL.TYPPI IS NULL')
      ->andWhere ('DATE_METEO.IDPROJET = ?','PROJET_SIGIP.IDPROJET')
      ->andWhere ('TT.NOMCOLONNE = ?','TYPMETEO')
      ->andWhere ('TT.PARAM1 = ?','SIGIP')
      ->andWhere ('TT.CODTYPE = ?','DATE_METEO.TYPMETEO')
      ->andWhere ('DATE_METEO.MARQUANT=?','1' or 'DATE_METEO.DTMETEO=?',(SELECT ('MAX(DTMETEO)') ->from ('DATE_METEO') ->Where ('IDPROJET = ?','PROJET_SIGIP.IDPROJET')));
     
      return $query->execute(array(),Doctrine_Core::HYDRATE_ARRAY);
    Mais comme vous vous en doutez, ça ne fonctionne pas...

    Pourriez vous m'aider?

    d'avance merci,
    Dash777

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Par défaut Requete max
    Désolée, mais c'est trop compliqué pour moi. J'essaie déjà juste une requête avec MAX et elle marche pas !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    	<?php $element_en_cours = Doctrine_Query::create()
    	 		->select('MAX(NumElement)')
    			->from('TElement E, TDossier D')
    			->where('D.Annee = 2010 ')
    			->execute();
    		   echo $element_en_cours;
    	?>
    Dans mon fichier log :
    {Doctrine_Connection_Mysql} query : SELECT MAX(NumElement) AS t__0 FROM TElement t, TDossier t2 WHERE (t2.annee = 2010) - ()

    Donc ça m'a pas l'air trop mal ! Mais mon echo renvoie :

    Doctrine_Collection
    data : Array(
    0 : Object(TElement)
    )


    Et je ne sais pas ce que c'est .

    Qqun a une idée ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    89
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2010
    Messages : 89
    Par défaut
    En fait ma requête était bonne, et le retour aussi.

    C'est le

    Doctrine_Collection
    data : Array(
    0 : Object(TElement)
    )


    qui me gênait.

    Mais il renvoie un tableau, un Doctrine Collection il me semble et forcément le 1er indice est 0.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/04/2011, 16h15
  2. Problème requete SQL
    Par tonyskn dans le forum Langage SQL
    Réponses: 3
    Dernier message: 14/11/2004, 20h37
  3. requete complexe
    Par Thunder_nico dans le forum Langage SQL
    Réponses: 8
    Dernier message: 07/10/2004, 11h36
  4. problème requete sql
    Par Fred- dans le forum ASP
    Réponses: 2
    Dernier message: 13/06/2004, 02h20
  5. Problème Requete SQL et QuickReport
    Par arnaud_verlaine dans le forum C++Builder
    Réponses: 7
    Dernier message: 07/01/2004, 09h31

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