Этот вопрос устарел, но я подумал, что просто добавлю его для справки.
Я бы порекомендовал начать использовать Zend_Db_Select с Zend_Db.Я много делал с Zend_Db в последнее время.Дополнительная информация из справочника Zend_Db_Select .
Предположим, у вас есть адаптер Zend_Db: $ this -> _ 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 по объекту select содержит много полезной информации о том, как создавать еще более сложные запросы с помощью 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'
, но я написал выше для краткости и ясности в примере.
OneЯ только что натолкнулся на использование 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);
Обратите внимание, что независимо от того, какую следующую функцию «где» вы используете, будет объединяться с предыдущим операторомэтот операнд.Хорошо, это звучит странно.
Если второе «где» - это «ИЛИ», то это будет условное «ИЛИ».Если второе «где» - это «И», оператор будет «И».
Другими словами, первая функция WHERE игнорируется с точки зрения того, какое условие она будет использовать.
На самом деле, я только что задал вопрос о переполнении стека вчера относительно выполнения комплекса WHERE с использованием select .
Надеюсь, это поможет!Ура!