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個類別爲空?儘管有一類商家,但我上面的聲明會返回空白結果事件。
你只需要完成你的連接條件。使用初始條件'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
所以我在哪裏添加它?在第二個joininner查詢? – d3bug3r 2013-04-10 03:19:11
使用'leftJoin'而不是'innerJoin',其中連接表可以包含NULL值。 'INNER JOIN'將使用條件連接表,並且在連接的表上找到空值時不會保留行。 'LEFT JOIN'可以讓你保持這條線。 – MatRt 2013-04-10 03:27:49