Этот вопрос немного устарел, но я думал, что просто добавлю к нему ссылку.
Я бы рекомендовал начать использовать Zend_Db_Select с Zend_Db. В последнее время я много делаю с Zend_Db. Больше от Zend_Db_Select reference guide.
Давайте предположим, что у вас есть Zend_Db адаптер: $ это -> _ дб
# this will get the Zend_Db_Select object
$select = $this->_db->select();
# now you build up your query with Zend_Db_Select functions
$select->from('mytable');
$select->where('field1 = ?', $field1);
$select->where('field2 = ?', $field2);
[...]
# echo to see the SQL (helps in debugging)
# SELECT * FROM mytable WHERE field1 = ? AND field2 = ? [...]
echo '<p>My SQL: ' . $select . '</p>';
# Execute the SQL/Fetch results
$results = $select->query()->fetchAll();
Это основы от вашего данного примера, но справочное руководство Zend Framework на выбора объекта имеет много полезной информации о том, как создавать еще более сложные запросы с помощью JOINS, UNIONS, GROUP BY, LIMIT, HAVING и т. д.
Если вы хотите использовать псевдоним для таблицы или параметров, можно использовать ассоциативный массив с именем псевдонима является значение индекса:
# SELECT p.* FROM products AS p
$select->from('p' => 'products');
Если вы хотите, чтобы вернуться только выбранные поля, добавить массив имен полей в качестве второго параметра:
# SELECT model FROM products
$select->from(products, array(model));
на самом деле, выше, может должен производить полное SQL как:
SELECT 'products'.model FROM 'products'
, но я написал выше для краткости и ясности в примере.
Одна вещь, с которой я только что столкнулся, использует AND и OR в условии WHERE.
# WHERE a = $a
$select->where('a = ?', $a);
# WHERE a = $a AND b = $b
$select->where('a = ?', $a);
$select->where('b = ?', $b);
# WHERE a = $a OR b = $b
$select->where('a = ?', $a);
$select->orWhere('b = ?', $b);
# WHERE a = $a AND b = $b
$select->orWhere('a = ?', $a);
$select->where('b = ?', $b);
Обратите внимание: что бы ни использовалась следующая функция «где», она будет сочетаться с предыдущим оператором в качестве этого операнда. Хорошо, это звучит запутанно.
Если второе «где» является «ИЛИ», оно будет «ИЛИ» условным. Если вторым «где» является «AND», утверждение будет «AND».
Иными словами, первая функция WHERE игнорируется с точки зрения того, какое условие она будет использовать.
На самом деле, я только что задал вопрос о переполнении стека вчера о выполнении complex WHERE using select.
Надеюсь, что это поможет! Приветствия!
отлично работает. Thankx – Max