Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在“中使用复杂表达式”;“订购”;在Mysql中_Mysql_Sql Order By - Fatal编程技术网

在“中使用复杂表达式”;“订购”;在Mysql中

在“中使用复杂表达式”;“订购”;在Mysql中,mysql,sql-order-by,Mysql,Sql Order By,我有一张桌子“成交” 我想归档以下订单: 1) 底部的过期交易 2) 交易id高于顶部5的交易,按交易id排序 3) 处理RAND与seed订购的底部id低于/等于5的交易 选择交易id,按expired=1从交易订单中过期,交易id

我有一张桌子“成交”

我想归档以下订单:

1) 底部的过期交易

2) 交易id高于顶部5的交易,按交易id排序

3) 处理RAND与seed订购的底部id低于/等于5的交易


选择交易id,按expired=1从交易订单中过期,交易id<5,rand(1)desc

这个查询是错误的,因为表的顶部也将按兰德公司排序,而我想按deal_id desc排序的顶部部分


这是它应该如何照顾的:

+---------+---------+
| deal_id | expired |
+---------+---------+
|       10|       0 | top part ordered by
|       9 |       0 | deal_id desc 
|       6 |_______0 | if ( deal_id < 5 AND expired = 0 )
|       4 |       0 |  
|       1 |       0 | bottom part ordered
|       5 |       0 | by rand(seed) 
|       7 |       0 | expired = 1 at the bottom
|       5 |       1 |
|       7 |       1 |
|       8 |       1 |
+---------+---------+
+---------+---------+
|交易id已过期|
+---------+---------+
|10 | 0 |顶部零件由订购
|9 | 0 |交易id描述
|6 |如果|如果|如果|交易id<5且过期=0)
|       4 |       0 |  
|订购1 | 0 |底部零件
|兰特5 | 0 |(种子)
|7 | 0 |过期=底部1
|       5 |       1 |
|       7 |       1 |
|       8 |       1 |
+---------+---------+
是否可以通过在“orderby”中仅使用表达式来存档我知道我可以使用UNION,但我真的不想,它可以让我的框架保持简单


谢谢。

您可以使用案例陈述

ORDER BY CASE 
 WHEN expired = 1 THEN 99 
 WHEN deal_id < 5 THEN deal_id 
 WHEN deal_id > 5 THEN Rand() + 5 //so that the value is between 5 and 6
 ELSE 100 END
按案例排序
过期时=1,则为99
当交易id<5时,则交易id
当deal_id>5时,则Rand()+5//使该值介于5和6之间
否则100结束
像这样的东西

SELECT
  deal_id,
  expired
FROM
  Deal
ORDER BY
  expired = 1,
  deal_id < 5,
  case when (expired=1 or deal_id<5)=false
       then deal_id
       else rand()
  end desc
选择
交易id,
期满
从…起
处理
订购人
过期=1,
交易id<5,

case-when(expired=1或deal_id谢谢,但现在工作正常。无论如何,我不知道mysql中的case,干杯。太棒了,现在看起来很简单:)和SQLfiddle看起来很棒,每天都有新的东西。谢谢
SELECT
  deal_id,
  expired
FROM
  Deal
ORDER BY
  expired = 1,
  deal_id < 5,
  case when (expired=1 or deal_id<5)=false
       then deal_id
       else rand()
  end desc