I want to combine AND OR mysql queries in CI. I have already seen this thread: http://codeigniter.com/forums/viewthread/92818/. But they don't provide the exact solution there.
How do I create the following query using strictly the CI framework? (I can create the query easily without the brackets but then it is not the same query.)
SELECT * FROM `Persons` WHERE
LastName='Svendson' AND Age="12" AND
(FirstName='Tove' OR FirstName='Ola' OR Gender="M" OR Country="India")
P.S.: This is just a sample query even if it makes no sense & Do not suggest writing the entire OR part of the query inside a single where()
.
EDIT: Basically I want the implementation of the following simple query:
SELECT * FROM `table` WHERE field1='value1' AND (field2='value2' OR field3='value3')
In CodeIgniter 3 there are new methods group_start() and group_end() which serve exactly for this purpose.
Currently with CI2 you can't access the Query Builder method ($this->db->_compile_select() ) of the Database class without extending the Database class and changing the method's access type from private to public/protected, that kills the ability to build Subquery's like your trying to build using the ActiveRecord class. The only method to make a subquery like the one your trying to build would be to just use the db query method
There was a blog post about doing this at CI Subquerys but it's out of date and only works on CI 1.7 Hope that helps a bit.
The query itself doesn't make sense, you're selecting:
Tove seems like a man's name, so selecting the gender is unnecessary. Ola seems like a girl's name, so selecting the gender is not only unnecessary, but it just doesn't make sense. Your query will return any 12 year old male named Svendson, any 12 year old from India named Svenson, and Tove and Ola Svendson, IF they're 12 years old.
Why don't you want to put it between () brackets? Do you want to accomplish it with active record for some reason?
In Codeigniter we can use like this it easy to understand.
You can use this simply
you can also use
and this will work?