2011-11-11 85 views
0

我有一个保存应用程序状态的列 - (新建/批准/拒绝/待定) 列名称是状态。现在我该如何订购select语句来订购状态,以便'新'应用程序进入显示器的顶部。Select Order By ORDER

我想这(SELECT * FROM applications ORDER BY status where status ='New')

这是不行的,它给我的错误信息。

+2

'SELECT ... WHERE ... ORDER'是一般语法。但是,当你只检索“新”行时按状态“新”排序是没有意义的。 –

+0

该栏中的其他值是什么?只是'老'? –

+0

http://stackoverflow.com/questions/8064459/how-to-sort-rows-by-on-off-sold/8064517#8064517 – Oyeme

回答

2

由于状态值“归档”,“新”与“旧”(因为这既不ASCDESC上班),你想检索所有的行,“新”的人首先,使用此:

SELECT * FROM `applications` 
ORDER BY IF(`status` = "new", 0, 1) 
+0

之前。感谢这个代码,像魔术一样工作:-)我感谢你的帮助。 –

1

丑陋但

(SELECT * FROM applications where status ='New') 
union all 
(SELECT * FROM applications where status !='New') 
2

试试这个:

SELECT * FROM applications ORDER BY status ASC; 

如果你已经是 '新' 与 '旧',那么这将导致 '新' 第一。

如果只希望新订单,那么你并不需要一个ORDER BY:如果有各种价值观,如新/核准

SELECT * FROM applications WHERE `status` = 'New'; 

/拒绝/待定,你只是想确保'新'在顶部你可以做到这一点

SELECT * FROM applications ORDER BY `status`, FIELD(`status`,'New'); 

如果你想先'新',然后'批准',那么你不在乎什么?

SELECT * FROM applications ORDER BY `status`, FIELD(`status`,'New','Approved'); 

(ASC和DESC有后场没有影响,但DESC后status就会把你喜欢的值在底部而非顶部)

什么扭转了订单,但让他们在上面?请在FIELD()函数中更改它们的顺序或参见下文。

最后,违背了先前的建议,这并没有真正的工作:

SELECT * FROM applications ORDER BY FIELD(`status`,'New','Approved'),`status`; 

要解决它,你后场需要DESC,但它给你自己的价值观反向(即“下令批准'首先,然后'新',然后休息):

SELECT * FROM applications ORDER BY FIELD(`status`,'New','Approved') DESC,`status`; 

我想我花了太多的时间在这个答案。嗯。

0

如果您希望将其用于某些严重问题,请使用外键替换状态列,并为status_id的文本表示添加另一个表。 然后你可以使用排序

SELECT * FROM applications ORDER BY status_id 

尽量避免使用列的保留名称。可以使用它们(带反引号),但如果你不小心,很容易导致问题。