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.