Php 如何选择某一天的唯一访客(用户)?

Php 如何选择某一天的唯一访客(用户)?,php,sql,symfony,doctrine,Php,Sql,Symfony,Doctrine,我可以在所有日期中使用唯一用户,但如果输入某一天,则会得到一个空数组 $query = $this->createQueryBuilder('a') ->leftJoin('a.event', 'e') ->leftJoin('a.customer', 'c') ->select('count(date_format(a.date, \'%Y %m %d\'))') ->where('e.id = :i

我可以在所有日期中使用唯一用户,但如果输入某一天,则会得到一个空数组

$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();

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

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

customer | event | date
 A       |  1    | 2020-06-17
 A       |  1    | 2020-06-18
 B       |  1    | 2020-06-18
现在您将
$date
设置为2020-06-17。然后,您的
和where
子句将删除带有其他日期的记录:

 A       |  1    | 2020-06-17
现在查询被分组(由于原始查询),并且
having(count(distinct date)>1)
(简化)过滤掉最后剩下的行

这显然是在假设下,表具有我假设的语义


因此,您可能希望在
中使用其他逻辑(可能>0),或者仅在未设置
$date
或其他任何设置时使用该逻辑。

您应该提供有关数据库中记录的外观、关系是什么、可能是sqlfiddle上的示例数据集以及预期结果等的更多数据。你真的很难弄清问题的真相。