wie kombinieren query() und limit () - Methoden in CodeIgniter

Ist es möglich, etwas zu tun, wie dies in 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();
}

Habe ich vereinfacht die Abfrage nur für demo-Zwecke... aber es ist eigentlich Recht Komplex, weshalb ich beschlossen habe zu benutzen, die query() Methode.

Aber die limit-Klausel nicht in der Abfrage enthalten... ich habe geprüft, indem die codeigniter profiler in meine controller und ich kann sehen, dass die Abfrage ausgeführt wird, ohne limit-Klausel.

Können Sie mir sagen, wie ich erreichen kann, dies mit der query() Methode?

Bearbeiten 1

Habe ich meine modifizierten Modell wie folgt Aussehen:

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

Habe ich hardcoded die Grenzwerte für jetzt... aber letztlich werde ich mit Hilfe der Werte, die übergeben bekommen in die Methode. Leider, dieser code funktioniert immer noch nicht.
Nach der profiler, hier ist, was ausgeführt wird:

(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

Es ist also die Schaffung von zwei separaten select-Anweisungen.

InformationsquelleAutor dot | 2013-02-23

Schreibe einen Kommentar