Questa domanda è un po 'vecchia, ma ho pensato di aggiungerla per l'amor di riferimento.
Si consiglia di iniziare a utilizzare Zend_Db_Select con Zend_Db. Ultimamente ho lavorato molto con Zend_Db. Altro da Zend_Db_Select reference guide.
lascia supporre si dispone di un adattatore 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();
Ecco le basi della tua data esempio, ma la guida di riferimento Zend Framework per l'oggetto di selezione ha un sacco di buone informazioni su come per creare query ancora più complesse con JOINS, UNIONS, GROUP BY, LIMIT, HAVING, ecc.
Se si voleva utilizzare un nome alias per una tabella o parametri, è possibile utilizzare un array associativo con il nome alias è il valore dell'indice:
# SELECT p.* FROM products AS p
$select->from('p' => 'products');
Se si desidera restituire solo i campi selezionati, si aggiunge un array di nomi di campo come secondo parametro:
# SELECT model FROM products
$select->from(products, array(model));
realtà, quanto sopra potrebbe dovrebbe produrre SQL pienamente qualificato come:
SELECT 'products'.model FROM 'products'
ma ho scritto quanto sopra per brevità e chiarezza nell'esempio.
Una cosa che ho appena visto è usare AND e OR nella condizione 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);
Avviso, che qualunque sia il seguente "dove" la funzione che si utilizza, si combinano con la precedente affermazione di quella operando. Ok, suonava confuso.
Se il secondo "dove" è un "OR" sarà un "OR" condizionale. Se il secondo "dove" è un "AND", l'affermazione sarà "AND".
In altre parole, la prima funzione WHERE viene ignorata in base alle condizioni che utilizzerà.
In effetti, ho appena fatto una domanda su Stack Overflow ieri riguardo a fare un complex WHERE using select.
Spero che questo aiuti! Cheers!
grande che funziona. thankx – Max