본문 바로가기
MySql

MySQL CodeIgniter에서 query () 및 limit () 메서드를 결합하는 방법

by 베이스 공부 2021. 1. 11.
반응형

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 () 메서드를 사용하기로 결정했습니다.

하지만 제한 절이 쿼리에 포함되어 있지 않습니다 ... 컨트롤러에서 codeigniter 프로파일 러를 활성화하여 확인했으며 쿼리가 제한 절없이 실행되는 것을 볼 수 있습니다.

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

따라서 두 개의 개별 select 문을 만듭니다.

 

해결 방법

 

결국 나는 모든 것을 수동으로하고있다.

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();
}

 

참조 페이지 https://stackoverflow.com/questions/15036641

 

 

반응형

댓글