2012-09-17 52 views
4

与多阶选择,所以我得到这个表:的MySQL通过

 
+----+---------------------+-----+----------------+ 
| ID | WHEN    | OFF | (other..stuff) | 
+----+---------------------+-----+----------------+ 
| 1 | 2012-09-17 17:00:00 | 0 | anything1  | 
| 2 | 2012-09-17 18:00:00 | 0 | anything2  | 
| 3 | 2012-08-31 21:00:00 | 1 | blabla321  | 
| 4 | 2012-08-31 18:30:00 | 1 | blab32121  | 
+----+---------------------+-----+----------------+ 

我想选择所有的密钥,但:

  • 通过时ASC与关闭= 0应该是为了钥匙,他们应该是 显示的第一
  • 键与关= 1应该是为了通过时DESC,他们应该之后显示 (末尾)

我想是这样的:

(SELECT * FROM `table` WHERE `off` = 0 ORDER BY `when` ASC) 
UNION 
(SELECT * FROM `table` WHERE `off` = 1 ORDER BY `when` DESC) 

但它不工作。

同时检查: http://i.imgur.com/81Hzq.jpg

+1

什么是错误? – wroniasty

+0

有没有错误它只是命令everthing通过'当'ASC – borewik

回答

1
select * 
from `table` 
order by `off`, 
    case `off` 
     when 0 then timestampdiff(second, current_timestamp, `when`) 
     when 1 then timestampdiff(second, `when`, current_timestamp) 
    end 
+0

是的!你真棒 :) – borewik

1
SELECT * 
FROM table 
ORDER BY CASE WHEN off = 0 THEN `when` END ASC, 
     CASE WHEN off = 1 THEN `when` END DESC 
+0

它几乎没问题,但它显示第一行off = 1,比在表结束时off = 0我试图修改它,但仍然可以这样做... – borewik

+0

@borewik尝试交换它们 –

2

试试这个:

(SELECT * FROM table WHERE off = 0 ORDER BY `when` ASC) 
UNION 
(SELECT * FROM table WHERE off = 1 ORDER BY `when` DESC); 

我认为,当是一个关键字,必须加引号。

+0

在第一个查询中有一个'order by'。我刚刚检查,它工作正常。 – wroniasty

+0

我试过了,它几乎没问题。但是,off = 1的部分的排序与off = 0 – borewik

+0

相同,这很奇怪,'when'列的类型是什么? – wroniasty