codeigniterでこのようなことをすることは可能ですか?
publi function getcat($category_id)
{
$query = "(SELECT cat.id, cat.title ";
$query = $query . "FROM bf_categories cat ";
$query = $query . "WHERE cat.id=" . $category_id;
$this->db->limit(2, 4);
$records = $this->db->query($query);
return $records->result();
}
デモの目的でクエリを簡略化しました...しかし、実際には非常に複雑であるため、このquery()
メソッドを使用することにしました。
しかし、limit句はクエリに含まれていません...コントローラーでcodeigniterプロファイラーを有効にして確認しましたが、limit句なしでクエリが実行されていることがわかります。
この方法を使用してこれを達成する方法を教えてくださいquery()
。
編集1
モデルを次のように変更しました。
public function get_categories_and_products($limit=5, $offset=0, $category_id=null)
{
print "<BR>the function got the following offeset: $offset and limit: $limit";
$query = "(SELECT cat.category_id, cat.title, cat.image_thumb, cat.deleted, cat.display_weight ";
$query = $query."FROM bf_categories cat ";
$query = $query."WHERE cat.parent_id=".$category_id;
$query = $query." AND cat.category_id <>".$category_id;
$query = $query.") UNION (";
$query = $query."SELECT p.product_id, p.name, p.image_thumb, p.deleted , p.display_weight";
$query = $query." FROM bf_product p ";
$query = $query."Inner join bf_product_category cp ";
$query = $query."on p.product_id=cp.product_id ";
$query = $query."Where cp.category_id=".$category_id.") ?";
$records = $this->db->query($query,array($this->db->limit(2, 4)));
return $records->result();
}
今のところ制限値をハードコーディングしました...しかし、最終的には、メソッドに渡される値を使用します。残念ながら、このコードはまだ機能しません。プロファイラーによると、実行されているものは次のとおりです。
(SELECT cat.category_id, cat.title, cat.image_thumb, cat.deleted, cat.display_weight FROM bf_categories cat WHERE cat.parent_id=3 AND cat.category_id <>3) UNION (SELECT p.product_id, p.name, p.image_thumb, p.deleted , p.display_weight FROM bf_product p Inner join bf_product_category cp on p.product_id=cp.product_id Where cp.category_id=3)
SELECT * FROM (`bf_categories`) WHERE `category_id` = '3' LIMIT 4, 2
つまり、2つの別々のselectステートメントを作成しています。