我有以下选择:
public function fetchFooSum($id)
{
$db = Zend_Registry::get('dbAdapter');
$select = $db->query("SELECT SUM(prod) FROM `output` WHERE loc_id IN (SELECT loc_id FROM `locations` WHERE location_id = ".$id.");");
return $select->fetchAll();
}
我有两个问题:
这被认为是形成此类查询的合理可接受的方式吗?
SELECT SUM(prod) FROM output WHERE loc_id IN (SELECT loc_id FROM locations WHERE location_id = ".$id.");
或者这是不理想的(我应该使用其他方式这样做...加入或结合或我听说过的一些事情,但我不知道何时使用)......
在Zend Framework中,您将如何制定此类查询?
我使用的方法有效,但我怀疑它是理想的方法(作为常规SQL查询和我在Zend Framework中的方式)。
有关查询的任何建议或如何在ZF中更好地实现它,我们表示赞赏。
答案 0 :(得分:1)
你的代码也不错。
$sum = $db->fetchOne(<<<SQL
SELECT SUM(prod)
FROM `output`
WHERE loc_id IN (
SELECT loc_id
FROM `locations`
WHERE location_id = {$db->quote($id)}
);
SQL
);
答案 1 :(得分:1)
我更喜欢使用内部联接来为此查询使用IN运算符,因为我相信它将以当前形式胜过您的查询(但还没有关于原因的参考:)< / p>
// example using Zend_Db_Select
$select = $db->select()
->from('output', array('sum(prod)'))
->join('locations', 'output.loc_id = locations.loc_id', array())
->where('locations.location_id = ?', $id);
// to dump query
print_r($select->__toString());
// to execute
$result = $db->fetchOne($select);
我强烈建议您阅读Zend_Db_Select
文档,其中包含大量实际示例 - 并且不应超过一个小时。