2013-04-10 3 views
0

안녕하십니까. 가능한 모든 비즈니스를 수행하기 위해 joininner 문을 사용하는 곳에서 다음 쿼리를 사용합니다. 기업이 처음 만들어 질 때 만 1 종류 나머지 둘은 나머지 2 개 종류가 null의 경우 내가 어떻게 쿼리를 joininner 일을 할 수있다 지금null이 아닌 경우에는 Mysql JoinInner

public function searchBusinessByCategoryString($str = null, $city=null,$start,$perpage) 
    { 
$select = $this->getDbTable()->getAdapter()->select(); 
     $select->from('business as b', array('b.business_name','b.business_url','b.reviews_num','b.cat_id','b.business_id','b.rating','b.business_phone','b.business_add1','b.business_add2','b.x','b.y','b.photo_url')) 
       ->joinInner('business_category as bc','b.cat_id = bc.cat_id',array('bc.cat_name')) 
       ->joinInner('business_sub_category as bsc','b.sub_cat_id = bsc.b_sub_cat_id',array('bsc.b_subcat_name','bsc.b_sub_cat_id')) 
       ->joinInner('business_sub_category as bsc2','b.sub_cat2_id = bsc2.b_sub_cat_id',array('bsc2.b_subcat_name','bsc2.b_sub_cat_id')) 
       ->joinInner('business_sub_category as bsc3','b.sub_cat3_id = bsc3.b_sub_cat_id',array('bsc3.b_subcat_name','bsc3.b_sub_cat_id')) 
       ->where("bsc.b_subcat_name like '".$str."%'") 
        ->orWhere("bsc.b_subcat_name like '%".$str."'")     
        ->orWhere("bsc.b_subcat_name= '".$str."'") 
        ->orWhere("bsc2.b_subcat_name like '%".$str."'")     
        ->orWhere("bsc2.b_subcat_name = '".$str."'") 
        ->orWhere("bsc2.b_subcat_name like '".$str."%'") 
        ->orWhere("bsc3.b_subcat_name like '%".$str."'")     
        ->orWhere("bsc3.b_subcat_name = '".$str."'") 
        ->orWhere("bsc3.b_subcat_name like '".$str."%'"); 
$result = $this->getDbTable()->getAdapter()->fetchAll($select); 
     return $result; 
    } 

문제를 널 (null)로 유지됩니다 업데이트됩니다? 내 위의 문장은 빈 범주의 비즈니스가 있지만 빈 결과 이벤트를 반환합니다.

+0

조인 조건을 완료하면됩니다. 초기 조건'b.sub_cat_id = bsc.b_sub_cat_id'를 사용하고 다른 2 개를 덧붙입니다 ('AND bsc.cat2 IS NOT NULL 그리고 bsc.cat3 IS NOT NULL') – MatRt

+0

그래서 어디에 추가합니까? 두 번째 joininner 쿼리? – d3bug3r

+1

조인 된 테이블이 NULL 값을 포함 할 수있는'innerJoin' 대신'leftJoin'을 사용하십시오. 'INNER JOIN'은 조건을 사용하여 테이블을 조인 할 것이고 조인 된 테이블에 null 값이있을 때 라인을 유지하지 않을 것입니다. 'LEFT JOIN (왼쪽 조인)'을 누르면이 줄을 계속 지킬 수 있습니다. – MatRt

답변

0

innerJoin 대신 leftJoin을 사용하십시오. 여기에서 조인 된 테이블에는 NULL 값이 포함될 수 있습니다. INNER JOIN은 조건을 사용하여 테이블을 조인하며 조인 된 테이블에 null 값이 있으면 행을 유지하지 않습니다. LEFT JOIN이 줄을 유지할 수 있습니다.

관련 문제