2010-07-26 53 views
0

我是Zend框架的新用户,以及我与Zend的语法化妆的问题。此查询:怎样才能让这个sql查询在Zend的语法

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 

有任何一个能帮助我? ! 谢谢..

+0

您可以格式化查询以使其更具可读性吗? – dwich 2010-07-26 08:55:32

+0

请正确格式化您的SQL – Martin 2010-07-26 08:55:50

回答

2

对于subquerys,你可以用这个例子作为依据:

... 
$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); 
... 

对于GROUP_CONCAT,我从来没有尝试过,但this page必须在commments一些例子

而且,请查看Zend Db Expressions.