この質問は少し古いですが、参考のために追加したいと思いました。
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();
これが特定の例の基本ですが、selectオブジェクトに関するZend Frameworkリファレンスガイドには、JOINS、UNIONS、GROUP BY、LIMIT、HAVINGなどを使用してさらに複雑なクエリを作成する方法に関する多くの優れた情報があります。
テーブルまたはパラメーターにエイリアス名を使用する場合は、エイリアス名がインデックス値である連想配列を使用します。
# SELECT p.* FROM products AS p
$select->from('p' => 'products');
選択したフィールドのみを返す場合は、フィールド名の配列を2番目のパラメーターとして追加します。
# SELECT model FROM products
$select->from(products, array(model));
実際には、上記は完全に修飾されたSQLを次のように生成するはずです。
SELECT 'products'.model FROM 'products'
しかし、例では簡潔さと明確さのために上記を書きました。
私が今遭遇したことの1つは、WHERE条件でANDとORを使用することです。
# 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」関数を使用する場合は、そのオペランドとして前のステートメントと結合することに注意してください。わかりました、それは紛らわしいように聞こえました。
2番目の「where」が「OR」の場合、「OR」条件になります。2番目の「where」が「AND」の場合、ステートメントは「AND」になります。
つまり、最初のWHERE関数は、使用する条件に関して無視されます。
実際、昨日、 selectを使用して複雑なWHEREを実行することに関して、StackOverflowについて質問しました。
お役に立てば幸いです。乾杯!