【问题标题】:SQL query with count and group by in Symfony2 QueryBuilderSymfony2 QueryBuilder 中带有计数和分组依据的 SQL 查询
【发布时间】:2013-07-12 15:13:19
【问题描述】:

我需要你的帮助。我有这个 SQL 查询:

SELECT * , COUNT( * ) AS count FROM mytable GROUP BY email ORDER BY id DESC LIMIT 0 , 30

但我想在 Symfony2 中使用 Doctrine 和 createQueryBuilder() 执行此操作。 我试过这个,但没有用:

$db = $this->createQueryBuilder('s');
$db->andWhere('COUNT( * ) AS count');
$db->groupBy('s.email');
$db->orderBy('s.id', 'DESC');

你能帮帮我吗?谢谢:)

【问题讨论】:

  • 没有用是什么意思?如何LIMIT 你的教义结果已回答here before

标签: mysql symfony doctrine


【解决方案1】:

您需要运行 2 个查询:

$db = $this->createQueryBuilder();
$db
    ->select('s')
    ->groupBy('s.email')
    ->orderBy('s.id', 'DESC')
    ->setMaxResults(30);

$qb->getQuery()->getResult();

$db = $this->createQueryBuilder();
$db
    ->select('count(s)')
    ->groupBy('s.email')
    //->orderBy('s.id', 'DESC')
    ->setMaxResults(1);

$qb->getQuery()->getSingleScalarResult();

【讨论】:

  • 错误答案,它导致的结果与问题中的初始查询不同。
【解决方案2】:

我尝试使用

$query->select('COUNT(DISTINCT u)');

到目前为止,它似乎运行良好。

【讨论】:

    【解决方案3】:
    $db = $this->createQueryBuilder('mytable');
    $db
        ->addSelect('COUNT(*) as count')
        ->groupBy('mytable.email')
        ->orderBy('mytable.id', 'DESC')
        ->setFirstResult(0)
        ->setMaxResults(30);
    $result = $db->getQuery()->getResult();
    

    希望它有帮助,即使它是一个旧堆栈

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多