【问题标题】:Laravel get order positionLaravel 获取订单位置
【发布时间】:2014-10-26 07:09:09
【问题描述】:

我的数据库中有一个表 USERS 和表 POSTS。

关系(用户类):

public function Posts() {
    return $this->hasMany('Post', 'uid', 'id');
}

我的问题是:如何查询用户并按帖子数量排序,如何显示他们的排名位置?

例如

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');
}

这给了我或多或少的好结果,但我仍然无法获得排名位置并且无法通过 POSTS 排序。

如果我尝试添加订单

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');
}

它给了我一个错误 UNKNOWN COLUMN 'POSTS'

【问题讨论】:

  • 我的回答对你有帮助吗?

标签: php mysql laravel laravel-4 eloquent


【解决方案1】:
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 ");
        }

【讨论】:

  • 我怎样才能按帖子数量排序并显示排名位置?
  • NUMBER_OF_POSTS 是排序依据和显示排名位置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-09-05
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
  • 2011-06-27
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多