我正在10月cms上创建一个前端排行榜。
我当前使用的系统如下:

当我编辑将值存储在db上的输入之一时,javascript将获取该值并将其与所有其他值求和,并将其与隐藏总和存储在db字段中。

因此,当我想按总点数获取记录列表时,我只是这样做:

use RainLab\User\Models\User;

function onInit() {
   $this['activatedUsers'] = User::whereIsActivated(true)->orderBy('RankPoints', 'desc')->get();
}


通过包含和的字段对该结果进行排序。

那就是当前的位置,并且工作正常。我想要实现的是按一个变量对记录进行排序(例如x)。但是,如果两个用户的x值相同,则会使用另一个变量(y)对它们进行排序。最终,我想使用两个以上的变量来完成此操作,但是我想从这个简单的两个变量系统开始,这样我才能理解思想过程。

例:

php - Octobercms-按变量排序记录,如果值相同,则按第二个变量排序-LMLPHP

在当前方法中,用户(a)位于用户(b)之上,因为它在其他变量中具有较高的数字。但是,如果我要按级别,然后按健身点对所有用户进行排序,则玩家(b)实际上将排在首位。

希望你们能理解和帮助,
提前致谢。

编辑:

在查询中使用第二个变量添加第二个orderby似乎可行,此方法正确吗?

最佳答案

使用MySQL,只需使用几个ORDER BY条件就可以按多个值对结果进行排序。

例如,下面将首先按级别,然后按等级对用户排序。

$users = User::whereIsActivated(true)
    ->orderBy('Level', 'desc')        // x
    ->orderBy('RankPoints', 'desc')   // y
    ->get();

07-24 09:51
查看更多