为了账号安全,请及时绑定邮箱和手机立即绑定

教义 按列排序,但在另一列上不同

教义 按列排序,但在另一列上不同

PHP
白衣非少年 2022-08-19 11:03:05
似乎无法将我正在尝试为我正在处理的监视系统执行的 Doctrine 查询包络在脑后。我的底层数据库是 SQLite。我的表相当简单:CREATE TABLE disk_space_usage (    id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,    disk_name VARCHAR(255) NOT NULL,    size INTEGER NOT NULL,    free INTEGER NOT NULL,    d_profile DATETIME NOT NULL --(DC2Type:datetime_immutable),    site_id INTEGER NOT NULL)每次从数据收集系统导入运行时,我们将为每个“site_id”创建多个新记录。“site_id”的每组记录将具有相同的“d_profile”值。我想查询 Doctrine 以获取给定“site_id”的最新记录集。例如,假设“site_id”12345 有 5 个磁盘、“d1”、“d2”、“d3”、“d4”和“d5”,并且此导入已连续运行 100 天。将有 500 条与“site_id”12345 相关的记录。我想得到最新的5。但是,磁盘数因站点而异,并且随着磁盘的委托和停用,任何给定站点的磁盘数量可能会有所不同。此外,无法保证导入将每天运行,因此我需要获取此站点的最新记录集,无论日期如何,也无论磁盘数量如何。我的查询当前如下所示:return $this->createQueryBuilder('dsu')    ->select()    ->distinct()    ->where('dsu.site = :customer')    ->groupBy('dsu.diskName')    ->orderBy('dsu.dProfile', 'DESC')    ->setParameter('customer', $customerSite)    ->getQuery()    ->getResult();但是,虽然这会返回此站点的一组磁盘,但它们是最旧的,而不是最新的记录。任何和所有的帮助赞赏!:)
查看完整描述

1 回答

?
侃侃尔雅

TA贡献1801条经验 获得超16个赞

我认为这应该可以解决您的问题。

不是必需的,并且会失败,因为某些字段对于每个条目都是不同的。distinc()


我指定要选择的数据仅具有具有相同值的字段。

要知道最新的,我曾经选择过。

这将使它,所以你只得到唯一/不同的结果。

然后返回标量结果(数组而不是对象)。MAX()dProfilgroupBy()


return $this->createQueryBuilder("disque")

            ->select("disque.id, disque.diskName, disque.size, disque.free, MAX(disque.dProfile) AS dProfile")

            ->andWhere("disque.site = :customer")

            ->groupBy("disque.diskName")

            ->orderBy("disque.dProfile", "DESC")

            ->setParameter('customer', $customerSite)

            ->getQuery()

            ->getScalarResult();


查看完整回答
反对 回复 2022-08-19
  • 1 回答
  • 0 关注
  • 101 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号