Laravel 如何在拉威尔获得排名
在我的Laravel5.3应用程序中,投票表有一个净投票列。我想根据净票数找到视频的排名。我想显示如下列表所示的排名。我知道sql@raw方法。但是,我想用拉威尔方法。因为,还有一些其他的表与这个用户表连接,一些其他的卖空也需要完成 视频表:Laravel 如何在拉威尔获得排名,laravel,eloquent,laravel-5.3,Laravel,Eloquent,Laravel 5.3,在我的Laravel5.3应用程序中,投票表有一个净投票列。我想根据净票数找到视频的排名。我想显示如下列表所示的排名。我知道sql@raw方法。但是,我想用拉威尔方法。因为,还有一些其他的表与这个用户表连接,一些其他的卖空也需要完成 视频表: id | net_votes| video_id | ------ | -------: |:-------: | 1 | 5 | 1 | 2 | 11 | 2 |
id | net_votes| video_id |
------ | -------: |:-------: |
1 | 5 | 1 |
2 | 11 | 2 |
3 | 3 | 1 |
4 | 6 | 3 |
5 | 5 | 2 |
我想得到这样的结果
id | net_votes| rank
------ | -------: |:----:
2 | 11 | 1
4 | 6 | 2
1 | 5 | 3
5 | 5 | 4
3 | 3 | 5
$subquery = "(
SELECT username,
first_name,
video_title,
net_votes,
Sum(net_votes) AS total
FROM videos
LEFT JOIN users
ON videos.user_id = users.id
LEFT JOIN profile
ON users.id = profile.user_id
GROUP BY videos.id
ORDER BY total DESC,
videos.created_at DESC ) totals";
$score_board_list = DB::table(DB::raw($subquery))
->select(
'*',
'total',
DB::raw('@r:=@r+1 as rank'),
DB::raw('@l:=total'))
->get();
我现在正在使用这个代码。它起作用了。但我想用拉威尔雄辩的方法
$score_board_list = DB::select("SELECT *, total, @r:=@r+1 as rank,
@l:=total FROM ( select username, first_name, video_title,
net_votes, sum(net_votes) as total from videos
LEFT JOIN users ON videos.user_id = users.id
LEFT JOIN profile ON users.id = profile.user_id
group by videos.id order by total desc, videos.created_at desc ) totals, (SELECT @r:=0, @l:=NULL) rank");
这样做
将子查询存储到变量中
$subquery = "(
SELECT username,
first_name,
video_title,
net_votes,
Sum(net_votes) AS total
FROM videos
LEFT JOIN users
ON videos.user_id = users.id
LEFT JOIN profile
ON users.id = profile.user_id
GROUP BY videos.id
ORDER BY total DESC,
videos.created_at DESC ) totals";
然后相当于
Select * from (subquery)
变成雄辩的是
DB::table(DB::raw('subquery'))
然后选择一个自定义列
// for example
->select(DB::raw('@r:=@r+1 as rank'))
因此,您的查询生成器如下所示
id | net_votes| rank
------ | -------: |:----:
2 | 11 | 1
4 | 6 | 2
1 | 5 | 3
5 | 5 | 4
3 | 3 | 5
$subquery = "(
SELECT username,
first_name,
video_title,
net_votes,
Sum(net_votes) AS total
FROM videos
LEFT JOIN users
ON videos.user_id = users.id
LEFT JOIN profile
ON users.id = profile.user_id
GROUP BY videos.id
ORDER BY total DESC,
videos.created_at DESC ) totals";
$score_board_list = DB::table(DB::raw($subquery))
->select(
'*',
'total',
DB::raw('@r:=@r+1 as rank'),
DB::raw('@l:=total'))
->get();
用户根据净投票数的排名-->您可以按净投票数的降序排列,瞧,您得到了第一名、第二名等。。好吧,至少,给了我们一个你尝试过的例子。。同样**与这个用户表**是相当有趣的,如果你认为它是至关重要的,张贴它也…详细到possible@BagusTesa我已经编辑了我的问题。谢谢。你是说你想使用laravel查询生成器?是的@新手:你应该研究MVC,并且有说服力。使用Laravel 5.3并进行这样的原始查询毫无意义。。。