-1

我有名为员工的 MySQL 表

 1. id 
 2. employee 
 3. state

我不知道如何查询数据库,其中名称为“纽约”的州将首先出现,所有其他记录将正常出现。这是我到目前为止所拥有的

$sql = "select * from employees order by";
4

5 回答 5

9

最简单的选择:

ORDER BY (state = 'New York') DESC, state

因为(state = 'New York')将返回 1 (true) 或 0 (false),您可以轻松地对结果进行排序,以便在其他州之前返回纽约(state = 'New York'返回 1)。

另一种选择是使用CASE

ORDER BY CASE WHEN state = 'New York' THEN 0 ELSE 1 END, state
于 2012-11-07T22:55:50.540 回答
3
select * from employees order by state="New York" desc;

这会按州对记录进行排序,是否等于纽约。我注意到您将它拼写为 New Yark 两次,因此您可能需要取消更正上述内容才能使用您的数据。“desc”导致排序下降而不是上升,将“真实”值放在首位。

正如 JClaspill 所指出的,没有状态等于“纽约”的记录将自然排序,而不是按状态排序。添加, state到该order by语句将按州按字母顺序对这些其他记录进行排序,但首先保留“纽约”记录。

于 2012-11-07T22:58:37.177 回答
0

使用控制流函数字符串函数将“AAA”添加到“New York”而不是其他任何内容。

按结果字符串排序。

于 2012-11-07T22:53:01.963 回答
0

您可以通过强制相关状态提高等级来向订单添加条件:

mysql [sandbox]> create table t1 (id integer primary key, state varchar(20));
mysql [sandbox]> insert into t1 values(1,'Last State'), (2, 'First State');
mysql [sandbox]> select * from t1;
1   Last State
2   First State
mysql [sandbox]> select * from t1 order by state='Last State';
2   First State
1   Last State

这对 2 行的计算结果为“假,真”,这对将假条件置于顶部进行排序。

于 2012-11-07T22:59:25.010 回答
0

$sql = "SELECT * FROM employees ORDER BY CASE WHEN state = \'New York\' THEN 0 ELSE 1 END, state";

于 2012-11-07T23:57:58.513 回答