2010-07-26 3 views
0

je suis un nouvel utilisateur de Zend Framework, et j'ai un problème avec la syntaxe Zend pour faire cette requête:Comment faire cette requête SQL dans Zend Syntaxe

SELECT i.*, k.id as id_key, GROUP_CONCAT(DISTINCT k.nome ORDER BY k.id SEPARATOR " ") as tag, GROUP_CONCAT(DISTINCT f.dimensioni ORDER BY f.id SEPARATOR " | ") as formati 
FROM immagine i 
LEFT JOIN immagine_has_formato fi ON fi.immagine_codice=i.codice 
LEFT JOIN formato f ON f.id=fi.formato_id 
LEFT JOIN keyword_has_immagine ki ON ki.immagine_codice=i.codice 
LEFT JOIN keyword k ON k.id=ki.keyword_id 
WHERE i.libro_codice = '06' AND i.codice IN (
SELECT ki.immagine_codice FROM keyword_has_immagine ki 
INNER JOIN keyword k ON k.id=ki.keyword_id 
WHERE lower(k.nome) = 'steam' 
) 
GROUP BY i.codice 

Il y a une qui peut me aider ? ! Merci ..

+0

Pouvez-vous formater la requête pour la rendre plus lisible? – dwich

+0

Veuillez formater correctement votre SQL – Martin

Répondre

2

Pour subquerys, vous pouvez utiliser cet exemple comme base:

... 
$subselect = $this->select()->setIntegrityCheck(false); 
     $subselect->from(array('e'=>'feed_entries'),array('e.id')) 
        ->join(array('f'=>'feeds'),'e.feed_id =f.id','') 
        ->join(array('ec'=>'entries_categorias'),'ec.entry_id =e.id','') 
        ->join(array('c'=>'categorias'),'ec.categoria_id =c.id','') 
        ->where('e.imagem332x332 =?',1) 
        ->where('e.deleted =?',0) 
        ->group('e.id') 
          ->where('c.nome IN(?)',$categories) 
         ->having('COUNT(DISTINCT ec.id) =?',count($categories)); 

$select = $this->select()->where('id IN ?',$subselect)->order('date DESC')->limit(4); 
return $this->fetchAll($select); 
... 

Pour group_concat, je ne l'ai jamais essayé, mais this page ont quelques exemples dans les commments

également , jetez un oeil à la Zend Db Expressions.