2012-04-10 11 views
5

Partendo dal presupposto che io ho 2 tabellegroup_concat con JOINLEFT in Zend Db Selezionare

articles 
    id    title 
    1    Article 1 
    2    Article 2 


Images 
    id    article_id  image 
    1    1    a.png 
    2    1    b.png 
    3    2    c.png 
    4    2    d.png 

Tutto quello che voglio è prelevare tutti gli articoli con le loro immagini.

Ad esempio:

article_id  title   images 
1    Article 1  a.png, b.png 
2    Article 2  c.png, d.png 

Come potrei farlo con Zend_Db_Select?

ho provato qualcosa di simile, ma non ha avuto fortuna:

$select = $this->getDbTable()->select()->setIntegrityCheck(false)->distinct(); 
$select->from(array('a'=>'articles')) 
    ->joinLeft(array('i'=>'images'),'i.article_id=a.id',array('images'=> new 
       Zend_Db_Expr('GROUP_CONCAT(i.image)'))); 

Restituisce appena soltanto 1 fila quale campo 'immagini' contiene immagini di entrambi gli articoli.

article_id  title   images 
1    Article 1  a.png, b.png, c.png, d.png 

Cosa sto facendo di sbagliato qui?

+1

Dove si trova il gruppo dalla clausola? –

risposta

7

Non è stata utilizzata la clausola nella query.

Prova di seguito:

$select->from(array('a'=>'articles')) 
    ->joinLeft(
     array('i'=>'images'), 
     'i.article_id=a.id', 
     array('images'=> new Zend_Db_Expr('GROUP_CONCAT(i.image)'))) 
    ->group('a.id'); 
+0

L'aggiunta di "GROUP BY" ha risolto il problema. O usare questo risolve anche: $ select-> joinLeft (array ('x' => nuovo Zend_Db_Expr ('(SELECT i.article_id, GROUP_CONCAT (i.image) come immagini FROM immagini come i GROUP BY i.article_id) ')), ' x.article_id = a.id ', array (' x.images ')); –

+0

La tua risposta mi ha davvero aiutato – Zygimantas

Problemi correlati