我的情况是需要双重订单。 让我试着解释一下(为了简单起见,我删除了不必要的列)。
(currentDate = 2017-07-31)
我有一个名为用户的表格,如此
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 | John Doe 2017-07-31 12:22:58
2 |测试名称| 2017-07-30 09:17:18
这两个需要随机顺序,因为它们不到48小时 所有其他用户(大于48小时)需要user_changed ASC的订单,如此
3 | itRocks | 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;
答案 0 :(得分:1)
我会尝试这样的事情:
SELECT *
FROM users
ORDER BY user_id ASC,
CASE
WHEN user_changed <= SUBDATE(NOW(), INTERVAL 48 HOUR) THEN
ADDDATE( CURDATE(), 1 + (FLOOR( 1 + RAND( ) * 10000 )))
ELSE user_changed
END ASC;
基本上,保持订单一致,但是将过去48小时内的事情设置为将来添加随机日期的某些值。