按月查找从数据库中提取的数据的总和并对其进行分组



我知道这个问题已经成为陈词滥调,但关于如何使用原则来解决这个问题,没有答案

因此,这是我从表中获取时间戳和金额的原则查询:

$q = $repo->createQueryBuilder('s')
            ->select('s.timestamp','s.amt')
            ->where('s.disId=:id')
            ->setParameter('id', $cid)
            ->getQuery()
            ->getArrayResult();

目前我正在从表中获取所有单独的行,我希望输出按月汇总amt(amount)并相应地显示记录。

感谢您的帮助

如果您的日期存储为时间戳,则不可能直接执行,因为Doctrine ORM目前不支持Mysql的MONTH()等函数,您需要在GROUP子句中使用这些函数。可能的解决方案:

  1. 例如,添加这些功能的安装捆绑包https://github.com/beberlei/DoctrineExtensions并使用函数MONTH()和FROM_UNIXTIME()

  2. 使用条令的原生查询:http://doctrine-orm.readthedocs.io/projects/doctrine-orm/en/latest/reference/native-sql.html

  3. 使用DBAL学说层:http://doctrine-orm.readthedocs.io/projects/doctrine-dbal/en/latest/

对你来说,最简单的可能是选项3,代码可以是这样的:

$em = $this->get("doctrine")->getManager();
$conn = $em->getConnection();
$sql = "SELECT MONTH(FROM_UNIXTIME(s.timestamp)) as mon, SUM(s.amt) as total FROM tablename s WHERE s.dis_id = ? GROUP BY MONTH(FROM_UNIXTIME(s.timestamp)) ORDER BY 1";
$stmt = $conn->prepare($sql);
$stmt->bindValue(1, $cid);
$stmt->execute();
$all_rows = $stmt->fetchAll();
foreach ($all_rows as $row) {
    echo "Month: {$row["mon"]}, Total: {$row["total"]} n";
}

试试这个:

$q = $repo->createQueryBuilder('s')
        ->select('s.timestamp','sum(s.amt)')
        ->where('s.disId=:id')
        ->groupBy('s.month')//your month field name of database
        ->setParameter('id', $cid)
        ->getQuery()
        ->getArrayResult();

通过使用groupBy,您将得到结果。

相关内容

  • 没有找到相关文章

最新更新