【问题标题】:MySQL Selects (Zend Framework DB Select)MySQL 选择(Zend 框架数据库选择)
【发布时间】:2010-11-17 22:31:59
【问题描述】:

我有以下选择:

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 框架中,您将如何制定这样的查询?

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

感谢任何有关查询或如何在 ZF 中更好地实现它的建议。

【问题讨论】:

    标签: php mysql zend-framework select


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

    【讨论】:

      【解决方案2】:

      你的代码还不错。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-11
        • 1970-01-01
        • 2010-11-22
        • 2011-02-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多