0

I could need a little help in nesting a like query. My goal is to accomplish something like followed:

Select * from 'Library_Book'

WHERE(
    ('BookName' LIKE '%FILTER1%' OR 'BookDescription' LIKE '%FILTER1%')
AND 
    ('BookName' LIKE '%FILTER2%' OR 'BookDescription' LIKE '%FILTER2%')
)

My approach until now is:

$this->db->select('Library_Book.*');
foreach($filter as $fltr){
    $this->db->like('Library_Book.BookName', $fltr);
    $this->db->or_like('Library_Book.BookDescription', $fltr);
}
$records = $this->find_all();

This results in:

Select * from 'Library_Book'

WHERE(
    'BookName' LIKE '%FILTER1%' OR 'BookDescription' LIKE '%FILTER1%'
AND 
    'BookName' LIKE '%FILTER2%' OR 'BookDescription' LIKE '%FILTER2%'
)

How can I get the brackets around my or_like statements?

Thanks

tutschdamoon

#

CI-BONFIRE ver 0.7

modules/mymodul/models/mymodel_model.php

  • lonnieezell pointed out the solution to me. – tutschdamoon Nov 21 '13 at 13:20
  • $wheres = array(); foreach ($filter as $fltr) { $wheres[] = "('BookName' LIKE '%{$fltr}%'' OR 'BookDescription' LIKE '%{$fltr}%')"; } $this->db->where( implode(' AND ', $wheres), null, false); $records = $this->find_all(); – tutschdamoon Nov 21 '13 at 13:20
  • How can I solve my own question? Or better, how can I post the solution here? Solved or not. – tutschdamoon Nov 21 '13 at 13:23

1 Answers1

0

The answer as told by lonnieezell from Bonfire.

I tested it and it works.

$wheres = array();
foreach ($filter as $fltr)
{
    $wheres[] = "('BookName' LIKE '%{$fltr}%'' OR 'BookDescription' LIKE '%{$fltr}%')";
}

$this->db->where( implode(' AND ', $wheres), null, false);
$records = $this->find_all();