2012-04-10 38 views
5

Giả sử tôi có 2 bảngGROUP_CONCAT với JOINLEFT trong Zend Db Chọn

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 

Tất cả những gì tôi muốn là truy xuất tất cả các bài viết với hình ảnh của họ.

Ví dụ:

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

Làm thế nào tôi có thể làm điều đó với Zend_Db_Select?

tôi đã cố gắng một cái gì đó như thế này nhưng không có may mắn:

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

Nó trả về chỉ duy nhất 1 hàng mà trường 'hình ảnh' chứa các hình ảnh của cả hai bài viết.

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

Tôi đang làm gì sai ở đây?

+1

đâu nhóm là bởi khoản? –

Trả lời

7

Bạn chưa sử dụng mệnh đề group by trong truy vấn.

Hãy thử dưới đây:

$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

Thêm "GROUP BY" đã giải quyết được sự cố. HOẶC sử dụng cách này cũng giải quyết: $ select-> joinLeft (mảng ('x' => new Zend_Db_Expr ('(SELECT i.article_id, GROUP_CONCAT (i.image) làm hình ảnh TỪ hình ảnh như i GROUP BY i.article_id) ')), ' x.article_id = a.id ', mảng (' x.images ')); –

+0

Câu trả lời của bạn thực sự đã giúp tôi – Zygimantas

Các vấn đề liên quan