Php Mysql joinner如果不为null

Php Mysql joinner如果不为null,php,mysql,zend-framework,Php,Mysql,Zend Framework,您好,我有以下查询,其中使用joininner语句来获取所有可能的业务。但是,当第一次创建业务时,只有1个类别将被更新,其余2个类别将保持为空 public function searchBusinessByCategoryString($str = null, $city=null,$start,$perpage) { $select = $this->getDbTable()->getAdapter()->select(); $select->

您好,我有以下查询,其中使用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查询呢?我上面的语句返回空的结果事件,尽管有一个类别的业务。

使用
leftJoin
而不是
innerJoin
,其中连接的表可以包含空值<代码>内部联接将使用该条件联接表,并且在联接表上发现空值时不会保留行<代码>左加入将允许您保留此行

您只需完成加入条件即可。使用初始条件
b.sub_cat_id=bsc.b_sub_cat_id
并附加2个其他条件(`and bsc.cat2不为NULL,bsc.cat3不为NULL`),那么我在哪里添加它呢?在第二个joininner查询中,使用
leftJoin
而不是
innerJoin
,其中联接的表可以包含空值<代码>内部联接将使用该条件联接表,并且在联接表上发现空值时不会保留行<代码>左连接将允许您保留此行。@马特谢谢,现在一切正常;-)