"WHERE OU" charge datatables dans la plage de données dans Codeigniter PHP

Im essayant de charger des données entre une gamme de données dans codeigniter. je ne pouvais pas get la déclaration where droit. La déclaration que je veux interroger est:

1- Obtenir des données si "inv_firstdate" est entre $from et $to
2- OU si inv_seconddate est entre $from et $to

Je ai essayé la requête dans le code, je aide Needyour s'il vous plaît, des idées?

 $from = "20150309"; $to = "2015410"; $query = $this->db->select('*'); $query = $this->db->from('inv'); $query = $this->db->join('users', 'users.hu_id = inv.usr_id'); $query = $this->db->order_by('inv_id', 'desc'); $query = $this->db->where('hu_sponsor', $id); $query = $this->db->where('pln_duration', 30); $query = $this->db->where('inv_status', 1); $query = $this->db->where('inv_firstdate >=', $from); $query = $this->db->where('inv_firstdate <=', $to); $query = $this->db->or_where('inv_seconddate >=', $to); $query = $this->db->or_where('inv_seconddate <=', $from); 

Vous ne pouvez pas faire where et or_where condition set. or_where ne peut être utilisé que lorsque les requêtes OR sont nécessaires. Vous pouvez utiliser ceci pour résoudre votre problème

  $this->db->select('*'); $this->db->from('inv'); $this->db->join('users', 'users.hu_id = inv.usr_id'); $this->db->order_by('inv_id', 'desc'); $this->db->where('hu_sponsor', $id); $this->db->where('pln_duration', 30); $this->db->where('inv_status', 1); $this->db->where('((inv_firstdate >='. $from.' AND inv_firstdate <= '.$to.') OR (inv_seconddate <='. $to.' AND inv_seconddate >= '.$from.'))'); $results=$this->db->get()->result(); 

Tu peux le faire :

 $query = $this->db->where('((inv_firstdate >= ', $from, FALSE); $query = $this->db->where('inv_firstdate <= ' . $to . ')', NULL, FALSE); $query = $this->db->or_where('(inv_seconddate >= ', $to, FALSE); $query = $this->db->where('inv_seconddate <= '. $from . '))', NULL, FALSE); 

Ou ca :

 $query = $this->db->where('((inv_firstdate >= ' . $from . ' AND inv_firstdate <= ' . $to . ') OR (inv_seconddate >= ' . $to . ' AND inv_seconddate <= ' . $from . '))'); 

Je ne suis pas sûr de vos formats de date dans la database, mais peu importe quand vos requêtes deviennent complexes dans mon expérience, vous finissez par écrire plus de code en utilisant l'logging actif CI que pur SQL ainsi en vain. Utilisez simplement $this->db->query("") avec vos différentes conditions construites à l'ancienne. Vous économiserez probablement 60% en lignes, il sera plus lisible et fonctionnera réellement. En reference aux formats de date, enveloppez vos strings dans mysql TIMESTAMP() pour être sûr qu'elles sont correctement analysées.