【问题标题】:Count on Zend_Db_Select依靠 Zend_Db_Select
【发布时间】:2010-10-10 15:26:45
【问题描述】:

假设我有一个随机的 zend_db_select 对象。

我如何对该对象进行计数,以便知道满足查询的项目数量。

我尝试了以下方法:

$data->TotalRecords = $select->columns(new Zend_Db_Expr('COUNT(*)'))->query()->fetch();

但这给了我以下错误:

消息:没有为 FROM 子句指定表

查询本身可以正常工作并返回结果集。

【问题讨论】:

    标签: php zend-framework zend-db-select


    【解决方案1】:

    有几种方法可以在 Zend_Db_Select 中指定要获取的列。以下两个产品相同的SQL

    $select = $db->select()
                 ->from('myTable', array())
                 ->columns(array('TotalRecords' => new Zend_Db_Expr('COUNT(*)')));
    
    $select = $db->select()
                 ->from('myTable', array('TotalRecords' => new Zend_Db_Expr('COUNT(*)')));
    

    from 方法接受第一个参数(表名)和第二个参数(要获取的列数组)。如果你使用表达式,你可以指定一个 'key' => Expr.

    将 Zend_Db_Select 转换为 SQL 字符串以进行调试或与其他函数一起使用非常容易。

    echo $select; // prints SELECT COUNT(*) AS `TotalRecords` FROM `myTable`
    

    这使用了一个 toString 方法,它被 Zend_Db 的 fetch 方法自动调用:

    $total = $db->fetchOne($select); 
    
    echo $total; //prints the number of rows matching the query
    

    其中 $db 是 Zend_Db 的一个实例。

    【讨论】:

      【解决方案2】:

      使用$select->__toString() 方法输出生成的查询,看看有什么问题。

      如果您的查询中没有 from 子句,请将 From() 方法添加到您的选择对象。

      【讨论】:

        【解决方案3】:

        如果你使用 Zend_Db_Select,你必须调用 from 方法来设置表名。使用 Zend_Db_Table_Select,表在构造函数中传递,因此您无需调用 from。

        【讨论】:

          【解决方案4】:
          $select = $db->select();
          
          $select->from(
              'table_name',
              array('cnt' => 'count(1)')
          );
          

          【讨论】:

            【解决方案5】:

            我刚遇到同样的问题,发现出了什么问题

            Zend_Db_Select::columns 函数需要一个数组而不是对象或字符串(当第一个参数是字符串或对象时,它可能会将其用作您提供的列的主表,但我不确定。)。

            将代码更改为

            $data->TotalRecords = $select->columns(array(new Zend_Db_Expr('COUNT(*)')))->query()->fetch();
            

            将解决您的问题

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-04-29
              • 1970-01-01
              • 2021-02-12
              相关资源
              最近更新 更多