Bonjour, j'ai une requête sql à écrire avec zend db, et j'ai pas envie d'écrire la requête en brute, donc voici la requête sql, qui marche:
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 SELECT * from catalogues_index AS i INNER JOIN catalogues_element AS e ON i.element_id = e.element_id LEFT JOIN catalogues_traduction AS l ON i.element_id = l.element_id AND l.traduction_langue = "US" INNER JOIN catalogues_heritage AS h ON i.heritage_id = h.heritage_id WHERE i.heritage_id IN ( SELECT heritage_id FROM catalogues_heritage WHERE catalogue_id =6 ) AND i.index_type = 1
Et en zend db, tout passe bien sauf le 'AND' dans le left join:
Oui, j'ai rajouté un 'Select element_id ect ... pour essayer de mieux cerner le problème, et même dans ce cas, il me dis ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 return $this->fetchAll($this->select() ->setIntegrityCheck(false) ->from(array('i' => 'catalogues_index')) ->joinInner(array('e' => 'catalogues_element'), 'i.element_id = e.element_id') ->joinLeft(array('l' => 'catalogues_traduction'), "i.element_id = (SELECT element_id from catalogues_traduction where element_id = i.element_id AND traduction_langue =$lang)") ->joinInner(array('h' => 'catalogues_heritage'), 'i.heritage_id = h.heritage_id') ->WHERE('i.heritage_id IN (?)', $heritage) ->WHERE('i.index_type =?', $type_id) )->toArray();
en réponse à AND traduction_langue =$lang sachant que $lang vaut bien US, je comprend pas qu'il interprete ça comme une colonne et non une value OoColumn not found: 1054 Unknown column 'US' in 'where clause'
Et, avant que quelqu'un me le fasse remarquer, il faut que le AND l.traduction_langue = "US" soit bien dans la clause LeftJoin et non pas en where, car le résultat que j'attend c'est un tableau avec des valeurs vide lorsqu'il ne trouve pas de valeure dans ce leftjoin, mais que le leftjoin ne vérifie que les cas où l'identifiant de l'élément est égal à celui du catalogue, et que la langue cherchée est bien 'US'
(car un élément peut avoir plusieurs traductions possible et je ne veux lister que celles de la langue choisis)
Quelqu'un peut m'aider à comprendre?
Partager