Esta pregunta es un poco antigua, pero pensé que solo la agregaría como referencia.
Recomendaría comenzar a usar Zend_Db_Select con Zend_Db. He estado haciendo mucho con Zend_Db últimamente. Más de Zend_Db_Select reference guide.
supongamos que tiene un adaptador de 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();
Eso es lo básico de su ejemplo dado, pero la guía de referencia de Zend Framework en el objeto de selección tiene un montón de buena información sobre cómo para construir consultas aún más complejas con UNIONES, SINDICATOS, AGRUPAR POR, LIMITAR, TENER, etc.
Si desea utilizar un nombre de alias para una tabla o parámetros, se utiliza una matriz asociativa con el nombre de alias siendo el valor del índice:
# SELECT p.* FROM products AS p
$select->from('p' => 'products');
Si desea devolver sólo los campos seleccionados, se agrega una serie de nombres de campos como un segundo parámetro:
# SELECT model FROM products
$select->from(products, array(model));
en realidad, lo anterior se debe producir SQL completamente calificado como:
SELECT 'products'.model FROM 'products'
pero escribí lo anterior para mayor brevedad y claridad en el ejemplo.
Una cosa que acabo de encontrar es usar AND y OR en la condición 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);
Tenga en cuenta que cualquiera que sea la siguiente función "where" que utilice, se combinará con la declaración anterior como ese operando. Ok, eso sonaba confuso.
Si el segundo "donde" es una "O", será un "O" condicional. Si el segundo "donde" es un "Y" la declaración será "AND".
En otras palabras, la primera función WHERE se ignora en términos de qué condición usará.
De hecho, acabo de hacer una pregunta sobre el desbordamiento de la pila ayer con respecto a hacer un complex WHERE using select.
Espero que ayude! ¡Salud!
genial que funciona. gracias – Max