这个问题有点老了,但我想我只是为了参考而添加它。
我建议开始将 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 参考指南有很多关于如何使用 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'
但为了在示例中简洁明了,我写了上面的内容。
我刚刚遇到的一件事是在 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”函数,都将与前面的语句组合为该操作数。好吧,这听起来令人困惑。
如果第二个“where”是“OR”,它将是“OR”条件。如果第二个“where”是“AND”,则语句将是“AND”。
换句话说,第一个 WHERE 函数在使用什么条件时会被忽略。
事实上,我昨天刚刚在 Stack Overflow 上问了一个关于使用 select 做一个复杂的 WHERE的问题。
希望有帮助!干杯!