【问题标题】:Calculate percentage in query ZF2计算查询 ZF2 中的百分比
【发布时间】:2013-07-12 08:46:18
【问题描述】:

有没有办法计算表中两个值之间的百分比并将其选为列?我知道这是可能的,但我想知道具体在 ZF2 环境中是否可能。

我的 ZF2 应用程序中有一个选择,它从数据库 (SQL Server) 中获取一堆数据。此查询涉及我想按可用磁盘空间(表中的一列)排序的表“库”。但我不希望它按可用空间的绝对量排序,而是按相对于总磁盘空间的百分比

所以我的意思是像

libraries.freeSpace / libraries.totalSpace as 'percentage'

但在 ZF2 选择中。这是当前的查询:

$resultSet = $this->tableGateway->select(function(Select $select) use($report){
    $select->where('id = ' . $report[0]->customer)
    ->order('freeSpace', 'asc');
});

e:答案。

使用 Zend\Db\Sql\Expression 你的模型。

将列添加到您的选择中:

$select->columns(array(
    'percentage' => new Expression('cast(libraries.freeSpace') as float / cast.('libraries.totalSpace') as float', false);

【问题讨论】:

  • 为什么不使用原始 SQL?

标签: sql select zend-framework2


【解决方案1】:

您可以将表达式传递给列,不要忘记第二个参数,您需要将其设置为 FALSE 以停止在您手动提供表前缀时自动为您添加它们。

use Zend\Db\Sql\Expression; 

$resultSet = $this->tableGateway->select(function(Select $select) use($report){
    $select->columns(array(
            'percentage' => new Expression('libraries.freeSpace / libraries.totalSpace')
        ), FALSE)
        ->where('id = ' . $report[0]->customer)
        ->order('freeSpace', 'asc')
    ;
});

【讨论】:

  • 谢谢,这项工作。次要编辑:需要将两列转换为浮点数,否则它不会理解除法。所以:'percentage' => new Expression('(cast(media.TotalFreeSpaceMB as float) / cast(media.TotalSpaceMB as float))', false)
猜你喜欢
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 2014-04-06
  • 1970-01-01
  • 1970-01-01
  • 2011-09-06
  • 2012-05-01
  • 2015-05-12
相关资源
最近更新 更多