2011-11-04 2 views
2

아래 쿼리는 수행하려는 작업을 나타내며 blog_posts 목록을 가져와 사용자 테이블과 조인해야합니다.Zend 하위 쿼리 인수

blog_updates_pictures에서 임의의 'picture_filename'을 가져오고 있습니다. blog_update_id를 참조하려면 join으로 blog_updates가 필요합니다.

내가 지금하고 싶은 것은 각 blog_post에 대한 blog_updates의 개수도 COUNT입니다. 이것은 하위 쿼리라고 생각하지만 모든 구현이 실패합니다. 또한 카운트가 인수를 허용하도록하는 것이 좋습니다 (예 : blog_updates where date =?). 또한 blog_post에 업데이트 나 그림이 없을 수도 있습니다.

$select = $db->select(); 
$select->from (array ('b' => 'blog_posts'), array('headline', 'date_created')); 
$select->join (array ('u' => 'users'), 'u.user_id = b.user_id', array ('email')); 
$select->joinLeft (array ('bu' => 'blog_updates'), 'bu.blog_id = b.blog_id', array()); 
$select->joinLeft (array ('bup' => 'blog_updates_pictures'), 'bu.blog_update_id = bup.blog_update_id', array ('picture_filename')); 

누군가 내게 방법을 보여줄 수 있습니까? 내가 지금하고 싶은 무엇

감사

+2

Zend_Db_Select를 사용하여 하위 쿼리를 만드는 방법에 대한 답변을 확인하십시오. http://stackoverflow.com/questions/5604872/nested-select-using-zend-db/5609246#5609246 – satrun77

+0

샘플 스키마 + 데이터를 넣고, 나는 해결책을 제시 할 것이다. –

답변

0

각 blog_post에 대한 blog_updates의 수를 계산에 있습니다.

집계를 사용하여 달성 할 수 있습니다 - GROUP BY bu.blog_id 및 추가 열 COUNT(bu.blog_id) AS blog_updates_count을 사용하십시오. 그것은 작동해야합니다.

+0

작동하지만 어떻게 날짜 매개 변수를 지정할 수 있습니까? 그런 다음 업데이트가있는 blog_posts 만 찾습니다. – bluedaniel

+0

코드는 내가 작성한 코드도 업데이트가없는 게시물을 찾습니다. GROUP BY가 아닌 LEFT 또는 INNER JOIN을 사용하는 방법에 따라 다릅니다. 날짜 지정? 날짜 매개 변수를 보통 WHERE date_created <[date]로 지정할 수 있습니다. – singles

+0

where 절을 추가하면 date_created <인 업데이트가있는 blog_posts 만 반환됩니다. 검색 기준을 충족시키지 못하면 모든 blog_posts 및 업데이트를 null로 돌려 주길 원합니다. – bluedaniel

0

등의 부속 선택 만들기 :

$subselect = $db->select() 
    ->from(
    array ('bu' => 'blog_updates'), 
    array(
     'blog_id', 
     'updates' => 'count(*)' 
    ) 
) 
    ->group("bu.blog_id"); 

을 그리고 다음과 같은 선택 주 $로 $의 부속 선택에 가입 : 우리는 당신이 더 완전한 답변을 얻을 수있는 테이블 구조를 가지고 있다면

$select->join(
    array('t' => $subselect), 
    "t.blog_id = b.blog_id", 
    array('updates') 
);