私はcondeigniter(初心者)のプロジェクトに取り組んでいます。私のプロジェクトには、カテゴリ、サブカテゴリ、キーワード、最小値と最大値などのさまざまなフィルターを使用した製品のリストが含まれています。カスタム php でこれを何百回も実行し、句$where
のすべての条件を変数にしました。where
例えば
$where = '';
if($category != '')
{
$where .= " category = '$category'";
}
現在、codeigniter には複数のパラメーターがあり、それらをcontroller
スルーuri segment
して呼び出しmodel
関数で取得し、すべてのパラメーターをrun mysql query
そこに渡すことができます。問題は、すべてのパラメーターが空または設定されているかどうかをチェックし、それに応じて複数のクエリを実行していることです。例えば。
if($category != '' && $subCategory != '')
{
//whole query here
}
else if($category == '' && $subCategory != '')
{
//whole query here
}
//and so on
結合(複数のパラメーター)があるため、これを行うための最適化方法が必要です。
私のサンプル条件とクエリ
if($subCat == '' && $vendor == '')
{
$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);
$this->db->limit($perpage,$page);
$query = $this->db->get();
return $query->result();
}
else if($subCat == '' && $vendor != '')
{
$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->join('vendors','vendors.id = listings.programme');
$this->db->where('categories.name',$cat);
$this->db->where('vendors.name',$vendor);
$this->db->limit($perpage,$page);
$query = $this->db->get();
return $query->result();
}
else if($subCat != '' && $vendor == '')
{
$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->join('subcategories','subcategories.id = listings.subcategory');
$this->db->where('categories.name',$cat);
$this->db->where('subcategories.name',$subCat);
$this->db->limit($perpage,$page);
$query = $this->db->get();
return $query->result();
}
else
{
$cat = str_replace("-"," ",str_replace("-and-"," & ",$cat));
$subCat = str_replace("-"," ",str_replace("-and-"," & ",$subCat));
$vendor = str_replace("-"," ",str_replace("-and-"," & ",$vendor));
$this->db->select('listings.* ');
$this->db->from('listings');
$this->db->join('categories','categories.id = listings.category');
$this->db->join('subcategories','subcategories.id = listings.subcategory');
$this->db->join('vendors','vendors.id = listings.programme');
$this->db->where('categories.name',$cat);
$this->db->where('subcategories.name',$subCat);
$this->db->where('vendors.name',$vendor);
$this->db->limit($perpage,$page);
$query = $this->db->get();
return $query->result();
}