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:
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 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))
Mais comme vous vous en doutez, ça ne fonctionne pas...
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);
Pourriez vous m'aider?
d'avance merci,
Dash777
Partager