4

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ステートメントを作成しています。

4

5 に答える 5

5

私はこの方法を試しました。開始と制限を使用して複数の結合を行いました。選択に従って参加を削除します。

    $this->db->select('*');
    $this->db->from('tbl_requestservice as r');
    $this->db->join('tbl_service as s','s.service_id=r.service_id');
    $this->db->limit($limit, $start);
    $query = $this->db->get();
    print_r($query->result());
    return $query->result();
于 2017-02-17T12:13:42.293 に答える
4

CIでのクエリは次のようになります。

$this->db->select("id, title");
$this->db->where("id", $category_id);
$this->db->from("bf_categories");
$this->db->limit($limit);
$query = $this->db->get();

if($query->num_rows() > 0)
{
   foreach($query->result() as $row)
   {
      echo $row->title;
   }
}

完全なクエリを含めると、問題を解決したり、より適切で効率的なアプローチを示したりするのが簡単になります。

于 2013-02-23T03:27:03.930 に答える
3

結局、私はすべてを手動で行っています。

public function get_categories_and_products($limit=10, $offset=0, $category_id=null)
{
    $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.") limit ".$offset.','.$limit;
    $catsandprods= $this->db->query($query);
    return $catsandprods->result();
}
于 2013-02-27T02:09:00.733 に答える
2

http://code-igniter.ru/user_guide/database/active_record.html

$this->db->start_cache();
$this->db->select('field1');
$this->db->stop_cache();
$this->db->get('tablename');

SELECT field1FROM(tablename

$this->db->select('field2');
$this->db->limit(10);
$this->db->get('tablename');

// SELECT field1field2FROM(tablename)limit 10

$this->db->flush_cache();
$this->db->select('field2');
$this->db->get('tablename');

// SELECT field2FROM(tablename

于 2016-03-24T10:11:00.820 に答える
1

あなたが使用することができます

$query = "(SELECT cat.id, cat.title ";
$query = $query."FROM bf_categories cat ";
$query = $query."WHERE cat.id=".$category_id." ?";

$this->db->query($query,array($this->db->limit(2, 4)));

また

 $this->db->select('id,title')->from('bf_categories ')->where('id', $id)->limit(2, 4);

ドキュメントへのリンク

于 2013-02-23T03:21:57.943 に答える