views:

338

answers:

3

I searched the Web and could not find anything that would show me a good solid example. My question is basically this:

How do I convert this:

SELECT * FROM table WHERE ((a = 1 AND b = 2) OR (c = 3 OR c = 4)) AND d = 5;

To Zend syntax similar to this:

$this ->select() ->from($this->_schema.'.'.$this->_name) ->where('a = ?', '1');

So how can it be done?

Thank a lot in advance.

+1  A: 

Per a message board post on the Zend Framework website, this may not be possible.

It seems to me that where() and orWhere() in the Zend_Db_Select class are not enough to be able to write all queries. It does not support the nesting of conditions, which doesn't enforce the user with abstraction in somewhat more complex cases. With where() and orWhere() I cannot write this:

Peder Rice
A: 
Ballsacian1
-1. This will replace every `?` with the content `array(1,2,3,4)` resulting in a query `SELECT "table"."col" FROM "table" WHERE ( ( a = 1, 2, 3, 4 AND b = 1, 2, 3, 4 ) OR ( c = 1, 2, 3, 4 OR c = 1, 2, 3, 4 ) ) AND (d = 5)`
Luiz Damim
You are correct. I seem to remember someone showing this "feature" on Stack Overflow a while back.
Ballsacian1
So, there is no way to do this with where or orWhere functions?
AD
+1  A: 

I had a similar problem. See the code example in the answer here: http://stackoverflow.com/questions/1179279/grouping-where-clauses-with-zend-db-table-abstract

So you would end up with something like:

$db = $this->getAdapter();
$this->select()
     ->where('(' . $db->quoteInto('a = ?', 1) . ' AND ' . $db->quoteInto('b = ?', 2) . ') OR (' . $db->quoteInto('c = ?', 3) . ' OR ' . $db->quoteInto('c = ?', 4) . ')')
     ->where('d = ?', 5);

Which would give you:

SELECT `table_name`.* FROM `table_name` WHERE ((a = 1 AND b = 2) OR (c = 3 OR c = 4)) AND (d = 5)
Mark
That might work. I need to try it.
AD