0

嗨,我有以下查询,它使用 joininner 语句来获取所有可能的业务。但是,当第一次创建业务时,只会更新 1 个类别,其余 2 个将保持为空

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;
    }

现在的问题是,如果其余 2 个类别为空,我怎么能不进行 joininner 查询?尽管有一个类别的企业,但我的上述语句返回空结果事件。

4

1 回答 1

0

使用leftJoin而不是innerJoin连接表可以包含 NULL 值的地方。INNER JOIN将使用条件连接表,并且当在连接表上找到空值时不会保留行。LEFT JOIN将允许你保持这条线

于 2013-04-10T03:42:51.363 回答