Php 拉威尔获得订单位置
我的数据库中有一个表USERS和表POSTS 关系(类用户): 我的问题是:如何查询用户并根据他们的帖子数量对他们进行排序,以及如何显示他们的排名位置 比如说Php 拉威尔获得订单位置,php,mysql,laravel,laravel-4,eloquent,Php,Mysql,Laravel,Laravel 4,Eloquent,我的数据库中有一个表USERS和表POSTS 关系(类用户): 我的问题是:如何查询用户并根据他们的帖子数量对他们进行排序,以及如何显示他们的排名位置 比如说 RANK_POS UID USER NUMBER_OF_POSTS 1 5 USER5 23 2 3 USER3 20 3 6 USER6 2 4 1 USER7 2 5
RANK_POS UID USER NUMBER_OF_POSTS
1 5 USER5 23
2 3 USER3 20
3 6 USER6 2
4 1 USER7 2
5 2 USER2 0
所以,我需要计算所有用户的帖子数量,并根据帖子数量进行排序,同时生成排名位置
我试过这个
public static function Rank() {
return DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user')
->select(DB::raw('users.id, count(posts.id) as POSTS, users.name, users.surname, users.nickname'))
->groupBy('user.id');
}
这给了我或多或少的好结果,但我仍然不能得到排名位置,也不能按职位排序
如果我尝试添加订单
public static function Rank() {
return DB::table('users')
->leftJoin('link_analytics', 'users.id', '=', 'link_analytics.user')
->select(DB::raw('users.id, count(link_analytics.id) as CONVERSIONS, users.name, users.surname, users.nickname'))
->groupBy('link_analytics.user')
->orderBy('POSTS');
}
它给了我一个错误未知的列“POSTS”,我如何按照POSTS的数量和显示排名位置来排序?POSTS的数量是一个order by和显示排名位置。我的回答对你有帮助吗?
public function Posts() {
return DB::select("SELECT @curRow := @curRow + 1 AS RANK_POS, a.id as uid, a.user,
IFNULL(b.NUMBER_OF_POSTS, 0) AS NUMBER_OF_POSTS
FROM users AS a
LEFT JOIN (
SELECT uid, count(*) as NUMBER_OF_POSTS
FROM posts
GROUP BY uid
) AS b ON a.id = b.uid
JOIN (SELECT @curRow := 0) r
order by NUMBER_OF_POSTS desc ");
}
public function Posts() {
return DB::select("SELECT @curRow := @curRow + 1 AS RANK_POS, a.id as uid, a.user,
IFNULL(b.NUMBER_OF_POSTS, 0) AS NUMBER_OF_POSTS
FROM users AS a
LEFT JOIN (
SELECT uid, count(*) as NUMBER_OF_POSTS
FROM posts
GROUP BY uid
) AS b ON a.id = b.uid
JOIN (SELECT @curRow := 0) r
order by NUMBER_OF_POSTS desc ");
}