5

私が欲しいものすべてが彼らのイメージですべての記事を盗んで、私は2つのテーブルGROUP_CONCAT

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 

を持っていると仮定すると。例えば

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句がありますか? –

答えて

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( 'i.article_id、GROUP_CONCAT(i.image)を画像として選択します。 ) '))、 ' x.article_id = a.id '、 array(' x.images ')); –

+0

あなたの答えは本当に助けてくれました – Zygimantas