mysql按顺序分为两个不同的部分
我有一个情况,我需要一个双重订单。 让我试着解释一下,为了简单起见,我删除了不必要的列 当前日期=2017年7月31日 我有一个名为user的表,如下所示 现在是棘手的部分。我需要订购两个不同的部分 第一部分: 第一部分需要是用户的随机顺序,在哪里更改 用户更改为48 几小时前或更少 第二部分: 如果用户更改的时间超过48小时,则需要按照用户更改的ASC订购剩余用户 因此,对于我们数据库中的示例数据,这应该是结果 约翰·多伊2017-07-31 12:22:58 2 |测试名称| 2017-07-30 09:17:18 这两个需要随机排序,因为它们少于48小时 所有其他超过48小时的用户都需要用户更改ASC的订单,如下所示 3 | itRocks | 2017-07-29 07:45:52示例52小时 4 | itRocks2 | 2017-07-28 07:45:52示例60小时 此外,我还需要一个默认的order by user_id,以便稍后在我的视图中对用户进行分组。因此,我尝试了一些查询: 问题1 问题2mysql按顺序分为两个不同的部分,mysql,sorting,sql-order-by,grouping,Mysql,Sorting,Sql Order By,Grouping,我有一个情况,我需要一个双重订单。 让我试着解释一下,为了简单起见,我删除了不必要的列 当前日期=2017年7月31日 我有一个名为user的表,如下所示 现在是棘手的部分。我需要订购两个不同的部分 第一部分: 第一部分需要是用户的随机顺序,在哪里更改 用户更改为48 几小时前或更少 第二部分: 如果用户更改的时间超过48小时,则需要按照用户更改的ASC订购剩余用户 因此,对于我们数据库中的示例数据,这应该是结果 约翰·多伊2017-07-31 12:22:58 2 |测试名称| 2017-07
我想试试这样的东西:
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小时的时间设置为将来的某个值。我尝试了您的查询@cwallenpole,但它没有显示出我上面描述的内容。先是莱斯,然后是我们的。然后,所有剩余的48小时或更长的时间按asc@Bham我换了一个。
SELECT *, if(user_changed >= SUBDATE(NOW(), INTERVAL 48 HOUR), RAND(), 0) AS rndOrder
FROM users
ORDER BY user_id, rndOrder ASC
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;
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;