我有以下选择:
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();
}我对此有两个问题:
从loc_id IN的输出中选择SUM(prod) (从location_id =“.$id.”的位置选择loc_id );
或者这不太理想(我应该用别的方法来做这件事吗.在Zend中的
我正在使用的方法很有效,但我怀疑它是否是理想的方法(无论是作为一个常规SQL查询还是在中这样做)。
任何关于查询或如何更好地在ZF中实现它的建议都是非常感谢的。
发布于 2010-11-17 22:55:54
与使用IN运算符进行此查询相比,我更倾向于内部联接,因为我相信它在当前形式中会优于您的查询(但还没有提到为什么:)
// 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文档,其中包含了大量的实用示例--而且不应该超过一个小时。
发布于 2010-11-17 22:52:45
你的代码不算太糟。
$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
);https://stackoverflow.com/questions/4209849
复制相似问题