如何为某一天选择唯一的访问者(用户)?

x8goxv8g  于 2021-07-26  发布在  Java
关注(0)|答案(2)|浏览(413)

我可以在所有的日子里使用唯一的用户,但是如果我输入某一天,那么我会得到一个空数组。

$query = $this->createQueryBuilder('a')
        ->leftJoin('a.event', 'e')
        ->leftJoin('a.customer', 'c')
        ->select('count(date_format(a.date, \'%Y %m %d\'))')
        ->where('e.id = :id')
        ->andWhere('a.page = :page')
        ->andWhere('c.status = :customer')
        ->setParameter('id', $event)
        ->setParameter('page', $page)
        ->setParameter('customer', $customer)
        ->groupBy('c.id')
        ->having('count(distinct date_format(a.date, \'%Y %m %d\')) > 1');

    if ($date != '') {
        $query = $query
            ->andWhere('date_format(a.date, \'%m/%d/%Y\') = :date')
            ->setParameter('date', $date);
    }
    $query = $query->getQuery()->getResult();
bogh5gae

bogh5gae1#

从symfony调试器中,您可以找到可运行的查询(在条令下),您可以使用它直接在数据库客户机中运行,并查看是否缺少任何内容,如日期格式或其他内容。

ulmd4ohb

ulmd4ohb2#

不知道您的查询中的“a”是什么,但假设它收集您的活动的参与度:

customer | event | date
 A       |  1    | 2020-06-17
 A       |  1    | 2020-06-18
 B       |  1    | 2020-06-18

现在你准备好了 $date 至2020-06-17。你的 andWhere 第条将删除带有其他日期的记录:

A       |  1    | 2020-06-17

现在查询被分组(由于原始查询),并且 having(count(distinct date) > 1) (简化)过滤掉最后一行。
这显然是在假设下的,即表具有我假设的语义
所以你可能需要一些其他的逻辑 having (可能大于0)或仅在 $date 还没定下来。

相关问题