我有一个投票表,它有字段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();
我知道这个查询错了。请帮帮我。
答案 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();
希望这有帮助。