php - Yii2:Gridview 中过滤值列的总和

标签 php mysql yii2

我可以使用以下代码对 gridview 中的列求和:

<?php
$command = Yii::$app->db->createCommand("SELECT sum(net_total) FROM estimate");
$sum = $command->queryScalar();
echo 'Total ='. $sum;
?>

我在数据库中有一列作为 discharge_date(这是日期和时间字段),我想更改此列上过滤器的总和。也就是说,如果过滤后的数据显示五个记录,那么我只想要这五个记录的总和。 谢谢。

根据回答更新

代码是这样的:

$query = app\models\Estimate::find();
$dataProvider = new ActiveDataProvider([
            'query' => $query,
            ]);
$ids = [];
foreach($dataProvider as $i => $model) {
    $ids[] = $model->id;}

$command = Yii::$app->db->createCommand("SELECT sum(net_total) FROM estimate WHERE `id` IN ('.implode(',',$ids).')"); // please use a prepared statement instead, just a proof of concept

$sum = $command->queryScalar();
echo $sum;

现在我在线上收到错误 $ids[] = $model->id; as 获取未知属性:yii\db\ActiveQuery::id

最佳答案

您是否尝试将此查询直接添加到 ActiveDataprovider?如解释的那样,可以指定额外的查询部分 here ,这应该是一个可能的解决方案。或者,您可以尝试从结果的 ActiveDataprovider 中提取 ID,并使用它们修改您的辅助查询。

第二种方法的例子:

// You should make sure that the same parameters are passed to
// the GridView's ActiveDataProvider and the Model's find() function
$idQuery = Estimate::find()->all();

$ids = [];
foreach ($idQuery as $i => $model) {
    $ids[] = $model['id'];
}

$command = Yii::$app->db->createCommand('SELECT sum(net_total) FROM estimate WHERE `id` IN ('.implode(',',$ids).')'); // please use a prepared statement instead, just a proof of concept
$sum = $command->queryScalar();

关于php - Yii2:Gridview 中过滤值列的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29174923/

相关文章:

PHP mySQL LOAD LOCAL INFILE 导入正好一半?

javascript - Pjax 不起作用,重新加载整个页面

php - 以 Yii2 形式更改场景

php - 如何回显此 MySQL 查询的结果?

javascript - 使用 PHP 从包含 youtube/vimeo url 的字符串中提取域名、视频 url 和视频 id 的正则表达式模式

php - 警告 preg_match()、mysqli_query() 在 xampp 上的 codeigniter 中出现错误

mysql - 计算持续时间百分比

php - 连接多个表并按行总和排序

asp.net - 错误 : "Fill: SelectCommand.Connection property has not been initialized."

php - 编码的 json 被 PostgresQL 损坏/转义?