我有一个保存应用程序状态的列 - (新建/批准/拒绝/待定) 列名称是状态。现在我该如何订购select语句来订购状态,以便'新'应用程序进入显示器的顶部。Select Order By ORDER
我想这(SELECT * FROM applications ORDER BY status where status ='New')
这是不行的,它给我的错误信息。
我有一个保存应用程序状态的列 - (新建/批准/拒绝/待定) 列名称是状态。现在我该如何订购select语句来订购状态,以便'新'应用程序进入显示器的顶部。Select Order By ORDER
我想这(SELECT * FROM applications ORDER BY status where status ='New')
这是不行的,它给我的错误信息。
由于状态值“归档”,“新”与“旧”(因为这既不ASC
或DESC
上班),你想检索所有的行,“新”的人首先,使用此:
SELECT * FROM `applications`
ORDER BY IF(`status` = "new", 0, 1)
之前。感谢这个代码,像魔术一样工作:-)我感谢你的帮助。 –
丑陋但
(SELECT * FROM applications where status ='New')
union all
(SELECT * FROM applications where status !='New')
试试这个:
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`;
我想我花了太多的时间在这个答案。嗯。
如果您希望将其用于某些严重问题,请使用外键替换状态列,并为status_id的文本表示添加另一个表。 然后你可以使用排序
SELECT * FROM applications ORDER BY status_id
尽量避免使用列的保留名称。可以使用它们(带反引号),但如果你不小心,很容易导致问题。
'SELECT ... WHERE ... ORDER'是一般语法。但是,当你只检索“新”行时按状态“新”排序是没有意义的。 –
该栏中的其他值是什么?只是'老'? –
http://stackoverflow.com/questions/8064459/how-to-sort-rows-by-on-off-sold/8064517#8064517 – Oyeme