我正在研究condeigniter(新手)的项目。我的项目包括使用不同过滤器(如类别,子类别,关键字,最小 - 最高价格等)列出产品。我在自定义php中完成了这一百次,其中我为{{1}中的所有条件创建变量$where
}子句。例如
where
现在在codeigniter中我有多个参数,我可以通过$where = '';
if($category != '')
{
$where .= " category = '$category'";
}
到controller
并调用uri segment
函数获取该参数,并传递所有参数和model
。问题是我检查每个参数是否为空或设置并相应地运行多个查询。例如。
run mysql query
我需要的是任何优化方式,因为我加入了(多个参数)。
我的示例条件和查询
if($category != '' && $subCategory != '')
{
//whole query here
}
else if($category == '' && $subCategory != '')
{
//whole query here
}
//and so on
答案 0 :(得分:2)
您只需要编写一次查询,而不是每次都编写。例如,您可能有几个条件,如您所述。例如,以下是我所做的事情:
$this->db->select('resource.id,city.name as city_name,city.provinceID,resource.Rate, skills.name')->from('resource')
->join('city','resource.cityID = city.id')
->join('resourceToSkillsMap','resource.id = resourceToSkillsMap.resourceID')
->join('skills','skills.id = resourceToSkillsMap.skillsID');
if($category != '' && $subCategory != '') #condition
{
$this->db->where('condition');
}
else if($category == '' && $subCategory != '') #condition
{
$this->db->where('condition');
}
$rs = $this->db->group_by('resource.id')
->limit($limit,$offset)
->get();
查看查询的编写方式only once
,但where condition
中提供了if else
。因此,您的查询将以这种方式构建。在执行查询后,只需echo $this->db->last_query();
来回显查询并根据需要进行调整。
答案 1 :(得分:1)
在您的助手中,您可以像这样构建$where
array()
$where = array();
if($category != '')
{
$where['category'] = $category;
} else {
$where['someotherkey'] = 'someothervalue';
}
在控制器中,您只需在调用模型时传递$where
数组。
$this->foo_model->foo_method($where);
在模特中你可以做这样的事情
$this->db->where($where);
修改强>
if($category != '')
{
//Along with your $this->db->where()
$this->db->join('table1','condition1');
} else {
//Along with your $this->db->where()
$this->db->join('table2','condition2');
}
收拾东西
$cat = str_replace("-"," ",str_replace("-and-"," & ",$cat));
$this->db->select('listings.* ');
$this->db->from('listings');
$this->db->join('categories','categories.id = listings.category');
$this->db->where('categories.name',$cat);
if($vendor != '') {
$this->db->join('vendors','vendors.id = listings.programme');
$this->db->where('vendors.name',$vendor);
}
if($subCat != ''){
$subCat = str_replace("-"," ",str_replace("-and-"," & ",$subCat));
$this->db->join('subcategories','subcategories.id = listings.subcategory');
$this->db->where('subcategories.name',$subCat);
}
$this->db->limit($perpage,$page);
$query = $this->db->get();
return $query->result();