【问题标题】:Zend Framework how to echo value of SUM queryZend Framework 如何回显 SUM 查询的值
【发布时间】:2010-04-15 09:31:48
【问题描述】:

我为 zend 框架创建了一个查询,在其中我尝试检索一列的总和,在本例中是名为“时间”的列。这是我使用的查询:

$this->timequery = $this->db_tasks->fetchAll($this->db_tasks->select()->from('tasks', 'SUM(time)')->where('projectnumber =' . $this->value_project));


$this->view->sumtime = $this->timequery;

回应查询告诉我这是正确的。但我无法正确回显结果。目前我正在使用:

echo $this->sumtime['SUM(time)'];

返回以下错误:

Catchable fatal error: Object of class Zend_Db_Table_Row could not be converted to string in C:\xampp\htdocs\BManagement\application\views\scripts\tasks\index.phtml  on line 46

第 46 行是我认为有回声的行。

我已经搜索了两天来解决这个问题,或者以不同的方式获得相同的结果。尝试序列化该值,但这也不起作用。

有人知道如何实现数据库列的总和吗?

非常感谢任何帮助!

注意:对 zend 框架来说非常新...

【问题讨论】:

    标签: zend-framework sum zend-db


    【解决方案1】:

    Zend_Db 有一些不错的实用方法,例如 fetchAll(您正在使用)来获取不同类型的数据:

    • fetchAll - 用于一组行
    • fetchRow - 单行
    • fetchOne - 用于单个单元格

    最简单的:

    $sum = $db->fetchOne('SELECT SUM(time) FROM tasks WHERE project_number = ?', $this->value_project);
    

    您也可以将 Zend_Db_Select 与这些方法一起使用,就像在您的问题中一样:

    //note that the SUM(time) part is passed as a Zend_Db expression, as it is not a column
    $select = $this->db_tasks->select()
                             ->from('tasks', new Zend_Db_Expr('SUM(time)'))
                             ->where('projectnumber =' . $this->value_project);
    
    $this->timequery = $this->db_tasks->fetchOne($select);
    

    这是因为 Zend_Db_Select 对象实现了一个 toString 方法来生成 SQL。

    【讨论】:

    • 嗨大卫,首先谢谢!但是我仍然收到错误消息:致命错误:调用未定义的方法 Application_Model_DbTable_Tasks::fetchOne() 这是否意味着它无法在类中找到 fetchOne?再次将其更改为 fetchRow 或 fetchAll 会产生无法转换为字符串的错误。快到了!
    • 如果想通了:最后一句必须是:$this->view->timequery = $this->db_tasks->getAdapter()->fetchOne($select);非常感谢!
    • 啊 - 我曾假设 $this->db_tasks 是一个数据库适配器,而不是 Zend_Db_Table。使用 getAdapter 获得正确的解决方案
    【解决方案2】:
    $timequery= $timequeriestb->select(Zend_Db_Table::SELECT_WITH_FROM_PART)
                              ->columns('SUM(time) AS Totaltime')
                              ->where('projectnumber ='. $this->value_project));
    

    【讨论】:

      【解决方案3】:

      你想要的SQL大概是:

      SELECT SUM(time) AS time_sum FROM tasks ...
      

      不确定如何在 Zend 中执行此操作。那么:

      echo $this->sumtime['time_sum'];
      

      【讨论】:

      • 已经尝试过了,但我仍然得到同样的错误。我猜这个查询很好,但我没有以正确的方式回显结果......
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-03-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多