2010-11-17 79 views
1

我有以下选择:MySQL的选择(Zend Framework的DB选择)

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(); 
    } 

我对此有2个问题:

  1. 这被认为是一个合理可接受的方式来形成这样的查询?

    SELECT SUM(prod) FROM output WHERE loc_id IN (SELECT loc_id FROM locations WHERE location_id = ".$id."); 
    

    或者是不理想(我应该使用这样的一些其他的方式......一个加入或工会或者说,我听说过,但我并不清楚何时使用诸如此类的东西).. 。

  2. 在Zend Framework中,你将如何制定这样的查询?

的方法,我使用的作品,但我怀疑它是这样做(作为一个普通的SQL查询,并在我的方式做到这一点Zend框架内)的理想方式。

有关查询或如何更好地在ZF中实现它的任何意见,赞赏。

回答

1

我宁愿一个内连接来使用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文档,其中有许多实用的示例 - 不应超过一个小时。

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 
);