在laravel中选择具有最大计数的项目

时间:2015-11-01 05:00:55

标签: php mysql laravel

我有一个投票表,它有字段id,itemId,votes,voteDate。投票字段的值为1(向上投票)或-1(向下投票)。 我想在特定时间段(1周)内选择具有最大投票和最大投票数的项目ID(我的意思是,如果我的项目1有3个投票,而我的项目2有5个投票,我想获得选择项目2)。 我的代码是

DB::table('votes')
->leftjoin('items','items.id','=','votes.itemId')
->select('items.title','items.image',DB::raw('sum(votes.votes) as voteSum'))
->whereBetween('voteDate',array($timePeriod,$today))
->get();

我知道这个查询错了。请帮帮我。

1 个答案:

答案 0 :(得分:0)

首先你应该找到$sum_max_vote_in_the_date_interval。 然后使用此

DB::table('votes')
->leftjoin('items','items.id','=','votes.itemId')
->select('items.title','items.image',DB::raw('sum(votes.votes) as voteSum'))
->whereBetween('voteDate',array($timePeriod,$today))
->havingRaw("SUM(`votes`.`votes`) = ".$sum_max_vote_in_the_date_interval)
->group_by(`votes`.'id')
->get();

DB::table('votes')
->leftjoin('items','items.id','=','votes.itemId')
->select('items.title','items.image',DB::raw('sum(votes.votes) as voteSum'))
->whereBetween('voteDate',array($timePeriod,$today))
->havingRaw("SUM(`votes`.`votes`) = `votes`.`votes`")
->group_by(`votes`.'id')
->get();

希望这有帮助。