MySQL选择(Zend Framework DB Select)

时间:2010-11-17 22:32:00

标签: php mysql zend-framework select

我有以下选择:

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

我有两个问题:

  1. 这被认为是形成此类查询的合理可接受的方式吗?

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

    或者这是不理想的(我应该使用其他方式这样做...加入或结合或我听说过的一些事情,但我不知道何时使用)......

  2. 在Zend Framework中,您将如何制定此类查询?

  3. 我使用的方法有效,但我怀疑它是理想的方法(作为常规SQL查询和我在Zend Framework中的方式)。

    有关查询的任何建议或如何在ZF中更好地实现它,我们表示赞赏。

2 个答案:

答案 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文档,其中包含大量实际示例 - 并且不应超过一个小时。