【问题标题】:Octobercms - Order records by variable, if value is the same, order by second variableOctobercms - 按变量排序记录,如果值相同,则按第二个变量排序
【发布时间】:2018-04-08 21:34:49
【问题描述】:

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

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

所以当我想按总分获取记录列表时,我只是这样做:

use RainLab\User\Models\User;

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

按包含总和的字段对结果进行排序。

这就是目前的情况并且工作得很好。我想要实现的是按一个变量(例如 x)对记录进行排序。但是如果两个用户的 x 值相同,它会使用另一个变量 (y) 对他们进行排序。最终我想用两个以上的变量来做这个,但我想从这个简单的两个变量系统开始,这样我就可以理解思考过程。

例子:

使用当前方法,用户 (a) 在用户 (b) 之上,因为它在其他变量中具有更高的数字。但是,如果我想按级别对所有用户进行排序,然后按体操点数排序,那么玩家 (b) 实际上会排在首位。

希望大家能理解和帮助, 提前致谢。

编辑:

在查询中使用第二个变量添加第二个 orderby 似乎有效,这种方法正确吗?

【问题讨论】:

    标签: php mysql sorting octobercms


    【解决方案1】:

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

    例如,下面会先按等级对用户进行排序,然后按排名积分。

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

    【讨论】:

    • 我实际上最终尝试了,因为这是合乎逻辑的事情,感谢您验证这个概念!
    猜你喜欢
    • 2021-01-18
    • 1970-01-01
    • 2018-10-07
    • 2013-05-10
    • 2022-02-12
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 1970-01-01
    相关资源
    最近更新 更多