Kombinieren von mysql-UND-ODER-Abfragen in Codeigniter

Lesezeit: 4 Minuten

Benutzer-Avatar
gopi1410

Ich möchte UND ODER MySQL-Abfragen in CI kombinieren. Diesen Thread habe ich schon gesehen: http://codeigniter.com/forums/viewthread/92818/. Aber sie bieten dort nicht die genaue Lösung.

Wie erstelle ich die folgende Abfrage ausschließlich mit dem CI-Framework? (Ich kann die Abfrage einfach ohne die Klammern erstellen, aber dann ist es nicht dieselbe Abfrage.)

SELECT * FROM `Persons` WHERE
LastName="Svendson" AND Age="12" AND
(FirstName="Tove" OR FirstName="Ola" OR Gender="M" OR Country="India") 

PS: Dies ist nur eine Beispielabfrage, auch wenn es keinen Sinn macht & schlagen Sie nicht vor, den gesamten ODER-Teil der Abfrage in eine einzige zu schreiben where().

BEARBEITEN: Grundsätzlich möchte ich die Implementierung der folgenden einfachen Abfrage:

SELECT * FROM `table` WHERE field1='value1' AND (field2='value2' OR field3='value3') 

Benutzer-Avatar
gadelat

In CodeIgniter 3 gibt es neue Methoden group_start() und group_end() die genau diesem Zweck dienen.

return $this->db
     ->where('LastName', 'Svendson');
     ->where('Age', 12);
     ->group_start()
         ->where('FirstName','Tove')
         ->or_where('FirstName','Ola')
         ->or_where('Gender','M')
         ->or_where('Country','India')
     ->group_end()
     ->get('Persons')
     ->result();

  • Wann wurde diese Version veröffentlicht?>

    – Umar Adil

    13. August 2014 um 6:54 Uhr

  • Dies ist der Weg, es jetzt zu tun. +1

    – Zobayer Hasan

    28. Mai 2016 um 14:06 Uhr

  • korrigiert mich wenn ich falsch liege bitte. muss es ein Semikolon in Ihrer Anweisung haben, mit Ausnahme des letzten? Entschuldigung, neu bei CI,

    – winnie damayo

    23. Juni 2017 um 15:56 Uhr

  • Das tut es nicht. Der Beitrag wurde geändert, um zu zeigen, wie man es vollständig fließend macht

    – gadelat

    23. Juni 2017 um 16:38 Uhr


  • Diese Lösung hat mir den Tag versüßt!!! Ich habe eine ganze Weile gebraucht, um diese einfache Lösung zu finden. Vielen Dank.

    – pr1nc3

    23. Oktober 2018 um 11:49 Uhr

und das wird funktionieren?

$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->where("(FirstName="Tove" OR FirstName="Ola" OR Gender="M" OR Country='India')", NULL, FALSE);
$query = $this->db->get('Persons');
return $query->result();

  • Ja, das wird funktionieren und das ist, was ich derzeit benutze. Dies ist jedoch nicht ausschließlich CI-Weg, ich muss Zeichenfolgen manuell maskieren. Auch ich vermutete diese Art von Antwort, die ich in der Frage erwähnt hatte Do not suggest writing the entire OR part of the query inside a single where().

    – gopi1410

    15. Juni 2012 um 19:24 Uhr


  • Ich habe Sie in meiner ersten Antwort gefragt, ob Sie einen Grund haben, dies mit Active Record zu erreichen, da die Definition einer Abfrage innerhalb von () IS ‘streng coigniter’ ist, es ist einfach kein Active Record. Wie auch immer, dies ist in CI nicht möglich, da Sie keine verschachtelten Abfragen in AR durchführen können. Dafür gibt es einen Query-String-Builder namens IgnitedQuery: assembla.com/wiki/show/IgnitedRecord/IgnitedQuery.

    – Dirk de Mann

    15. Juni 2012 um 19:48 Uhr

  • Das funktioniert bei mir nicht. Die zweite Where-Bedingung überschreibt die erste Where-Bedingung. CodeIgniter V 2.1.4

    – TARKUS

    30. Dezember 2013 um 13:48 Uhr

  • Was ist der ...NULL, FALSE) zum?

    – Dan

    17. Juni 2014 um 16:11 Uhr

  • NULL ist der Value-Parameter (nicht obligatorisch), FALSE entfernt Abfrage-Anführungszeichen (FALSE, weil dies die Klammern betrifft).

    – csotelo

    17. Juni 2014 um 16:41 Uhr

Unter Verwendung des Codeigniter 3.0-Frameworks gibt es neue Funktionen für separate oder Wo-und-Wo-Operationen, dh Gruppieren nach und Gruppenende

Code wie,

$this->db->where('LastName', 'Svendson');
$this->db->where('Age', 12);
$this->db->group_start();
$this->db->or_where('FirstName','Tove');
$this->db->or_where('FirstName','Ola');
$this->db->or_where('Gender','M');
$this->db->or_where('Country','India');
$this->db->group_end();
$query = $this->db->get('Persons');
return $query->result();

  • Groß! Werde das auch mal ausprobieren

    – gopi1410

    22. Mai 2018 um 17:36 Uhr

Sie können dies einfach verwenden

$this->db->where("status","live")->or_where("status","dead");

kannst du auch verwenden

$this->db->where("(status="live" OR status="dead")");

Benutzer-Avatar
Andy

In Codeigniter können wir es so leicht verständlich verwenden.

$sql = "SELECT
            *
        FROM
            `Persons`
        WHERE
            LastName="Svendson"
        AND Age="12"
        AND (
            FirstName="Tove"
            OR FirstName="Ola"
            OR Gender="M"
            OR Country = 'India'
        )";

$query = $this->db->query($sql);

return $query->result();

  • Für mich scheint es einfacher zu sein als eingebaute Funktionen

    – Jogi

    6. April 2017 um 9:58 Uhr

Benutzer-Avatar
Jatin Raikwar

Versuchen Sie es mit Query grouping

Link dazu

http://www.codeigniter.com/userguide3/database/query_builder.html#query-grouping

  • Für mich scheint es einfacher zu sein als eingebaute Funktionen

    – Jogi

    6. April 2017 um 9:58 Uhr

Derzeit können Sie mit CI2 nicht auf die Query Builder-Methode ($this->db->_compile_select() ) der Database-Klasse zugreifen, ohne die Database-Klasse zu erweitern und den Zugriffstyp der Methode von privat auf öffentlich/geschützt zu ändern, wodurch die Fähigkeit beendet wird um Unterabfragen zu erstellen, wie Sie versuchen, mit der ActiveRecord-Klasse zu erstellen. Die einzige Methode, um eine Unterabfrage wie die zu erstellen, die Sie zu erstellen versuchen, wäre die Verwendung der db-Abfragemethode

$table = $this->db->dbprefix('tablename');

$sql = "SELECT * FROM `{$table}` WHERE field1='?' AND (field2='?' OR field3='?') ";
$this->db->query($sql,array($field1,$field2,$field3));  

Dazu gab es einen Blogbeitrag unter CI-Unterabfragen aber es ist veraltet und funktioniert nur auf CI 1.7. Hoffe, das hilft ein bisschen.

1205190cookie-checkKombinieren von mysql-UND-ODER-Abfragen in Codeigniter

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy