Sql 基于联接表计数的条令搜索

Sql 基于联接表计数的条令搜索,sql,symfony,join,doctrine-orm,dql,Sql,Symfony,Join,Doctrine Orm,Dql,我的死敌SQL/DQL有一个问题 我有一个实体:风格和实体投票。一个样式可以有很多投票权(正如您所想象的),而一个投票权只与一个样式相关联 我现在想搜索投票数少于特定数量的样式(这是用户输入,但假设是5)。这是我在querybuilder中使用的代码 $qb = $this->createQueryBuilder('s'); $qb ->select("s") ->join('s.votes', 'v') ->addSelect

我的死敌SQL/DQL有一个问题 我有一个实体:风格和实体投票。一个样式可以有很多投票权(正如您所想象的),而一个投票权只与一个样式相关联

我现在想搜索投票数少于特定数量的样式(这是用户输入,但假设是5)。这是我在querybuilder中使用的代码

$qb = $this->createQueryBuilder('s');
$qb
    ->select("s")
    ->join('s.votes', 'v')
    ->addSelect("COUNT(v.id) as voteCount")
    ->where("voteCount < ?1")
    ->orderBy('voteCount', "DESC")
    ->setMaxResults(3)
    ->setFirstResult(0)
    ->groupBy('s.id')
    ->setParameter(1, 5);

$query = $qb->getQuery();
$result = $query->getResult();
$qb=$this->createQueryBuilder('s');
$qb
->选择(“s”)
->加入('s.vows','v')
->addSelect(“将(v.id)计数为voteCount”)
->其中(“voteCount<?1”)
->订购人(“voteCount”和“DESC”)
->setMaxResults(3)
->setFirstResult(0)
->groupBy('s.id')
->设置参数(1,5);
$query=$qb->getQuery();
$result=$query->getResult();
一旦我尝试执行查询,它基本上说,where子句中不知道I voteCount。下面是确切的错误消息

执行“选择s0_u.active作为active0,s0_u.views作为views1,s0_u.description作为description2,s0_u.name作为name3,s0_u.id作为id4,s0_u.id作为updated5更新,s0_u.id作为created6创建,计数(v1_u.id)作为scl7,s0_u.id作为battle_uid作为battle_8,s0_u.id作为user_uid作为user_9,s0_uu.id=v1_u.Style_uid,其中sclr7<中,s0_u.id作为凭证_id10,来自样式s0_uuu内部连接投票v1_u?按s0_u1;id分组按sclr7说明限制3偏移量0'排序,带参数[1]:

SQLSTATE[42S22]:未找到列:“where子句”中的1054未知列“sclr7”


我做错了什么?如何搜索voteCount?

聚合函数的条件,如
sum
count
,应放在子句中

$qb=$this->createQueryBuilder('s');
$qb->选择(“s”);
$qb->join('s.vots','v');
$qb->addSelect(“将(v.id)计数为voteCount”);
$qb->orderBy('voteCount','DESC');
$qb->setMaxResults(3);
$qb->setFirstResult(0);
$qb->groupBy('s.id');
$qb->具有(“计数(v.id)<?1”)//从哪里换的
$qb->setParameter(1,5);
$query=$qb->getQuery();
$result=$query->getResult();

不能在WHERE子句中引用列别名

改变

$qb->where("voteCount < ?1");
$qb->where(“voteCount<?1”);

$qb->where(“COUNT(v.id)<?1”);

$qb->where(“voteCount<?1”);使用$qb->where(“COUNT(v.id)<?1”);只是为了测试你可以看到,希望这将有助于谢谢你这工作,太好了。既然你这么说了,那就敲响了警钟这对我不管用。现在它告诉我一般错误:1111组函数的使用无效,但having的解决方案工作正常。但谢谢你的努力:)
$qb->where("voteCount < ?1");
$qb->where("COUNT(v.id) < ?1");