2012-04-10 73 views
5

假設我有2個表GROUP_CONCAT與JOINLEFT在Zend的Db的選擇

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 

所有我想要的是retreive所有文章與自己的形象。

例如:

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

我怎麼能做到這一點與Zend_Db_Select對象?

我想是這樣的,但沒有運氣:

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

它返回僅僅只有1行其「圖像」字段包含兩篇文章的圖像。

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

我在做什麼錯在這裏?

+1

哪裏是group by子句? – 2012-04-10 09:42:33

回答

7

您還沒有在查詢中使用group by子句。

如下嘗試:

$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

添加「GROUP BY」解決了問題。 或使用它也解決了它: $ select-> joinLeft(array('x'=> new Zend_Db_Expr('(SELECT i.article_id,GROUP_CONCAT(i.image)as image FROM images as i GROUP BY i.article_id )')), 'x.article_id = a.id', array('x.images')); – 2012-04-10 09:57:39

+0

你的回答真的幫了我 – Zygimantas 2016-07-29 19:36:50