2013-04-10 79 views
0

嗨,我有以下查詢在哪裏使用joininner語句來獲得所有可能的業務。但是,當一個業務是爲第一次創建僅1類別將被更新,其餘2將保持零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; 
    } 

現在的問題是我怎麼能這樣做joininner查詢,如果剩下的2個類別爲空?儘管有一類商家,但我上面的聲明會返回空白結果事件。

+0

你只需要完成你的連接條件。使用初始條件'b.sub_cat_id = bsc.b_sub_cat_id'並追加2其他('AND bsc.cat2 IS NOT NULL AND bsc.cat3 IS NOT NULL') – MatRt 2013-04-10 03:17:37

+0

所以我在哪裏添加它?在第二個joininner查詢? – d3bug3r 2013-04-10 03:19:11

+1

使用'leftJoin'而不是'innerJoin',其中連接表可以包含NULL值。 'INNER JOIN'將使用條件連接表,並且在連接的表上找到空值時不會保留行。 'LEFT JOIN'可以讓你保持這條線。 – MatRt 2013-04-10 03:27:49

回答

0

使用leftJoin而不是innerJoin其中連接的表可以包含NULL值。 INNER JOIN將使用條件連接表,並且在連接的表上找到空值時不會保留行。 LEFT JOIN將允許你保持這條線