Bonjour,
Peut-être que le sujet à déjà été traité, mais je ne vois pas bien les mots clefs à rechercher.
Dans un SELECT avec Zend_Db je lui précise les champs que je veux récupérer car comme il y a plusieurs tables jointes, si je prends tout les champs je ralenti la requête et surtout le traitement après.
Mon problème est que je suis limité au nombre de champs utilisés dans le 3ème argument du join.
Pour faire simple, disons que j'ai le droit qu'à 5 champs, si j'en mets 2 dans le premier join et 4 dans le deuxième je récupère un segmentation fault. Si je mets 3 dans le premier et 2 dans le second ce sera ok. Peu importe les champs, c'est le nombre qui m'amène au SF.
Voici le code pour les plus courageux:
Explication sur le code:
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 $select = $this->_db->select() ->from($this->_name , array(new Zend_Db_Expr('SQL_CALC_FOUND_ROWS '.$this->_Id))) ->join($this->_JDOC ,$this->_name.'.'.$this->_Id.' = '.$this->_JDOC.'.'.$this->_JDOC_Id ,array($this->_JDOC_Description) // Champ 1 ) ->joinLeft($this->_JDTR ,$this->_name.'.'.$this->_Id.' = '.$this->_JDTR.'.'.$this->_JDTR_Doc_Id .' AND '.$this->_JDTR_Active.' != 0' ,array('DTR_DEF_INFOS' => new Zend_Db_Expr( "CONCAT(".$this->_JDTR_OEM.",'-', " // Champ 2 .$this->_JDTR_PROJECT.",'-', " // Champ 3 // .$this->_JDTR_GP.",'-', " // Champ 4 // .$this->_JDTR_VERSION.",'-', " // Champ 5 .$this->_JDTR_EVO.")" // Champ 6 ) ) //,array($this->_JDTR_OEM, $this->_JDTR_PROJECT, $this->_JDTR_GP, $this->_JDTR_VERSION, $this->_JDTR_EVO ) ) ->join($this->_JUSR ,$this->_JDOC.'.'.$this->_JDOC_Creator.' = '.$this->_JUSR.'.'.$this->_JUSR_Id ,array( 'CREATOR_NAME' => $this->_JUSR_Name) // Champ 7 )
L'important ce sont les lignes écrite avec Champ X.
Si je décommente la ligne avec Champ 5 ou Champ 6, j'obtiens un SF.
Si je commente la ligne champ1 et que je décommente Champ 5 ou 6 cela fonctionne.
Si je commente champ 7 et champ 1 je peux décommenter champ 5 et champ 6...
Du coup pour l'instant je vais faire du select * (commentaire champ 1 et 7). Mais là je vais me récupérer plusieurs 10n de champs pour en exploiter 8 ou 9.
PS: pour les observateurs, le CONCAT ne change strictement rien au problème, vous pouvez voir qu'en commentaire j'avais la ligne qui me posait problème au début. Etant persuadé que c'était la ligne et non le nombre de champ de la requête complète...
D'avance merci à ceux qui me lirontet encore plus à ceux qui me répondront !!!
![]()
Partager