Php 拉威尔获得订单位置

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

我的数据库中有一个表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           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 ");
        }