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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist, wie eine Abfrage aussieht, wie in CI:
Wenn Sie den vollständigen query, wäre es einfacher, das problem zu lösen oder zeigen Ihnen einen besseren und effizienteren Ansatz.
InformationsquelleAutor Grigor
Am Ende mache ich alles manuell.
InformationsquelleAutor dot
Habe ich versucht auf diese Weise, mehrere join mit start und limit. Sie entfernen sich als pro-Wahl.
InformationsquelleAutor kishor soneji
http://code-igniter.ru/user_guide/database/active_record.html
WÄHLEN SIE
field1
AUS (tablename
)//WÄHLEN Sie
field1
,field2
AUS (tablename
) limit 10//WÄHLEN SIE
field2
AUS (tablename
)InformationsquelleAutor Vilintritenmert
können Sie
oder
link zu doc
eigentlich ist er nicht versuchen, um zu begrenzen ,er ist gar nicht hinzufügen ,er ist einfach mit
$this->db->limit(2, 4);
denken, dass möglicherweise automatisch hinzufügen begrenzenArun, ich habe einfach versucht, die Aktualisierung meiner code entsprechend deinem Beispiel und es funktioniert nicht. Überprüfen Sie bitte Editieren 1 in meinem post. Danke!
ich denke, dass yo u verpasste das ? symbol
warum gehst du nicht fügen Sie einfach Ihre LIMIT-Klausel der SQL... du hast manuell geschrieben, der rest der SQL-Zeile, also das, was ein paar Zeichen mehr?
InformationsquelleAutor Arun Killu