MySQL,订购人+;隔行

MySQL,订购人+;隔行,mysql,Mysql,不确定以前是否有人问过,但不确定要找什么。问题是: MySQL表包含字段 A, B, C, D A is 1 or 0 B is 1 or 0 C is 1, 2, 3 or 4 D is a date 到目前为止,B被忽略,“订货人”是: A DESC, C DESC, D ASC 现在想要的是拥有 A DESC, B "1 every other row else 0", C DESC, D ASC 这样我们就可以按如下顺序排列行 [A, 1, C, D] [A, 0, C, D]

不确定以前是否有人问过,但不确定要找什么。问题是:

MySQL表包含字段

A, B, C, D

A is 1 or 0
B is 1 or 0
C is 1, 2, 3 or 4
D is a date
到目前为止,B被忽略,“订货人”是:

A DESC, C DESC, D ASC
现在想要的是拥有

A DESC, B "1 every other row else 0", C DESC, D ASC
这样我们就可以按如下顺序排列行

[A, 1, C, D]
[A, 0, C, D]
[A, 1, C, D]
[A, 0, C, D]
[A, 1, C, D]
[A, 0, C, D]
[A, 1, C, D]
[A, 0, C, D] // last 0
[A, 1, C, D]
[A, 1, C, D]
[A, 1, C, D]
你知道如何在SQL中实现吗?这是关于按此顺序选择行的,所以选择。。。订购人


谢谢

所需的
订购人

order by 
    A DESC, 
    IF(B = 1, 2*(@odd := @odd + 1), 2*(@even := @even + 1) + 1),
    C DESC, 
    D ASC;
下面是一个完整的演示

SQL: 输出:
考虑提供适当的创建和插入语句,以及相应的期望结果。不确定你的意思是什么?这是关于选择具有特定顺序的数据。好的。祝你好运。非常感谢你的回答!
-- data
create table t1(A INT, B INT, C INT, D date);
insert into t1 values
(1,1,1,'2016-01-01'),
(1,1,2,'2016-01-02'),
(1,1,3,'2016-01-03'),
(1,1,4,'2016-01-04'),
(1,1,1,'2016-01-04'),
(1,1,2,'2016-01-05'),
(1,1,3,'2016-01-06'),
(1,0,4,'2016-01-07'),
(1,0,1,'2016-01-08'),
(1,0,2,'2016-01-09');
select * from t1 order by A DESC, C DESC, D ASC;

-- query wanted
select t1.* 
from t1 CROSS JOIN (select @even := 0, @odd := 0) param
order by 
    A DESC, 
    IF(B = 1, 2*(@odd := @odd + 1), 2*(@even := @even + 1) + 1),
    C DESC, 
    D ASC;
mysql> select * from t1 order by A DESC, C DESC, D ASC;
+------+------+------+------------+
| A    | B    | C    | D          |
+------+------+------+------------+
|    1 |    1 |    4 | 2016-01-04 |
|    1 |    0 |    4 | 2016-01-07 |
|    1 |    1 |    3 | 2016-01-03 |
|    1 |    1 |    3 | 2016-01-06 |
|    1 |    1 |    2 | 2016-01-02 |
|    1 |    1 |    2 | 2016-01-05 |
|    1 |    0 |    2 | 2016-01-09 |
|    1 |    1 |    1 | 2016-01-01 |
|    1 |    1 |    1 | 2016-01-04 |
|    1 |    0 |    1 | 2016-01-08 |
+------+------+------+------------+
10 rows in set (0.00 sec)

-- query wanted
mysql> select t1.*
    -> from t1 CROSS JOIN (select @even := 0, @odd := 0) param
    -> order by
    -> A DESC,
    -> IF(B = 1, 2*(@odd := @odd + 1), 2*(@even := @even + 1) + 1),
    -> C DESC,
    -> D ASC;
+------+------+------+------------+
| A    | B    | C    | D          |
+------+------+------+------------+
|    1 |    1 |    1 | 2016-01-01 |
|    1 |    0 |    4 | 2016-01-07 |
|    1 |    1 |    2 | 2016-01-02 |
|    1 |    0 |    1 | 2016-01-08 |
|    1 |    1 |    3 | 2016-01-03 |
|    1 |    0 |    2 | 2016-01-09 |
|    1 |    1 |    4 | 2016-01-04 |
|    1 |    1 |    1 | 2016-01-04 |
|    1 |    1 |    2 | 2016-01-05 |
|    1 |    1 |    3 | 2016-01-06 |
+------+------+------+------------+
10 rows in set (0.00 sec)