web-dev-qa-db-fra.com

combinaison de mysql ET OR requêtes dans Codeigniter

Je veux combiner ET OR requêtes mysql dans CI. J'ai déjà vu ce fil: http://codeigniter.com/forums/viewthread/92818/ . Mais ils n'y fournissent pas la solution exacte.

Comment puis-je créer la requête suivante en utilisant strictement le framework CI? (Je peux créer la requête facilement sans les crochets, mais ce n'est pas la même requête. )

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

P.S .: Ceci est juste un exemple de requête même si cela n'a aucun sens & Ne pas suggérer d'écrire la totalité de la partie OR de la requête dans une seule where().

EDIT: Fondamentalement, je veux l'implémentation de la requête simple suivante:

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

et cela fonctionnera?

$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();
41
csotelo

Dans CodeIgniter 3, il existe de nouvelles méthodes group_start () et group_end () qui servent exactement à cet effet.

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();
41
gadelat

Vous pouvez l'utiliser simplement

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

vous pouvez aussi utiliser

$this->db->where("(status='live' OR status='dead')");
3
Waseem shah

en utilisant le travail de cadre de codeigniter 3.0, il y a une nouvelle fonctionnalité disponible pour une opération séparée ou où et où.

code comme,

$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();
3
Sherin Green
2
Jatin Raikwar

Dans Codeigniter, nous pouvons utiliser comme cela, il est facile à comprendre.

$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();
2
Andy

Actuellement, avec CI2, vous ne pouvez pas accéder à la méthode Query Builder ($ this-> db -> _ compile_select ()) de la classe Database sans étendre la classe Database et changer le type d'accès de la méthode de privé à public/protégé, ce qui tue la capacité pour construire des sous-requêtes comme vous essayez de construire en utilisant la classe ActiveRecord. La seule méthode pour créer une sous-requête comme celle que vous essayez de créer serait d'utiliser simplement la méthode de requête db

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

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

Il y avait un article de blog à ce sujet sur CI Subquerys mais il est obsolète et ne fonctionne que sur CI 1.7 Hope qui aide un peu.

1
Shawn C