mysql按顺序分为两个不同的部分

mysql按顺序分为两个不同的部分,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

我有一个情况,我需要一个双重订单。 让我试着解释一下,为了简单起见,我删除了不必要的列

当前日期=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

问题2


我想试试这样的东西:

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;