是否可以在laravel查询中使用COALESCE。
$multipleitems = DB::table('votes')
->select('masterItemId',DB::raw('sum(votes) as voteSum'))
->whereBetween('voteDate',array($startDate,$endDate))
->where($condition)
->groupBy('masterItemId')
->get();
这是我的代码,我想得到每个项目及其总票数。如果没有投票,我想得到'0'。
但在上面的代码中,它返回至少有1票的项目。 是否有任何方法可以在laravel中完成这项工作?
答案 0 :(得分:5)
嗯,OP不太有帮助,但我会试一试!我假设,votes
表包含用户对项目的实际投票。这意味着,如果某个项目未收到任何投票,那么masterItemId
表中不存在该项目ID(votes
)。
这意味着投票表必须保留在masterItemId
字段的主要项目表上。我将调用主要项目表:items
,并假设它有一个itemId
字段,该字段与masterItemId
表中的votes
字段相匹配。在SQL术语中:
select items.itemId, ifnull(sum(votes.votes),0) as votesSum
from items left join votes on items.itemId=votes.masterItemId
where votes.voteDate between ... and ... and <other conditions>
group by items.itemId
我对Laravel并不熟悉,但你需要这样的东西,但不要把它当作复制粘贴代码:
$multipleitems = DB::table('items')
->leftJoin('votes','items.itemId','=','votes.masterItemId')
->select('items.itemId',DB::raw('ifnull(sum(votes.votes),0) as voteSum'))
->whereBetween('votes.voteDate',array($startDate,$endDate))
->where($condition)
->groupBy('items.temId')
->get();