Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL选择(Zend Framework DB选择)_Php_Mysql_Zend Framework_Select - Fatal编程技术网

Php MySQL选择(Zend Framework DB选择)

Php MySQL选择(Zend Framework DB选择),php,mysql,zend-framework,select,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.");"); re

我有以下选择:

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框架内,您将如何表述这样的查询

  • 我正在使用的方法是有效的,但我怀疑它是否是实现这一点的理想方法(无论是作为常规SQL查询还是在Zend框架中)


    任何关于查询或如何在ZF中更好地实现查询的建议都将不胜感激。

    您的代码还不错

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

    $sum=$db->fetchOne(对于此查询,我更喜欢使用内部联接而不是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);