【发布时间】:2018-01-07 09:40:26
【问题描述】:
我有一个需要双重订购的情况。 让我试着解释一下(为简单起见,我删除了不必要的列)。
(当前日期 = 2017-07-31)
我有一个名为 user 的表,就像这样
user_id | username | user_changed
---------------------------------
1 | John Doe | 2017-07-31 12:22:58 (less then 48 hours)
2 | Test name| 2017-07-30 09:17:18 (less the 48 hours)
4 | itRocks2 | 2017-07-28 07:45:52 (greater then 48 hours)
3 | itRocks | 2017-07-29 07:45:52 (greater then 48 hours)
现在是棘手的部分。我需要订购成两个不同的部分
第一部分: 第一部分需要是 user_changed 的随机顺序,其中 user_changed 是 48 几小时前或更短时间。
第二部分: 需要通过 user_changed ASC 订购 user_changed 大于 48 小时的剩余用户
所以对于我们数据库中的示例数据,这应该是结果
1 |约翰·多伊 | 2017-07-31 12:22:58
2 |测试名称| 2017-07-30 09:17:18
这两个需要随机顺序,因为它们不到 48 小时 所有其他用户(超过 48 小时)都需要 user_changed ASC 的订单,就像这样
3 |摇滚 | 2017-07-29 07:45:52(例如52小时)
4 | itRocks2 | 2017-07-28 07:45:52(例如60小时)
我还需要 user_id 的默认顺序,以便稍后在我看来对用户进行分组。所以我尝试了一些查询:
查询 1
SELECT *, if(user_changed >= SUBDATE(NOW(), INTERVAL 48 HOUR), RAND(), 0) AS rndOrder
FROM users
ORDER BY user_id, rndOrder ASC
查询 2
SELECT *, if(user_changed >= SUBDATE(NOW(), INTERVAL 48 HOUR), "true", "false") AS rndOrder
FROM users
ORDER BY user_id ASC,
CASE
WHEN rndOrder = 1 THEN user_changed RAND()
WHEN frndOrder = 0 THEN user_changed ASC
END;
【问题讨论】:
标签: mysql sorting sql-order-by grouping