我有名为员工的 MySQL 表
1. id
2. employee
3. state
我不知道如何查询数据库,其中名称为“纽约”的州将首先出现,所有其他记录将正常出现。这是我到目前为止所拥有的
$sql = "select * from employees order by";
最简单的选择:
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
select * from employees order by state="New York" desc;
这会按州对记录进行排序,是否等于纽约。我注意到您将它拼写为 New Yark 两次,因此您可能需要取消更正上述内容才能使用您的数据。“desc”导致排序下降而不是上升,将“真实”值放在首位。
正如 JClaspill 所指出的,没有状态等于“纽约”的记录将自然排序,而不是按状态排序。添加, state
到该order by
语句将按州按字母顺序对这些其他记录进行排序,但首先保留“纽约”记录。
您可以通过强制相关状态提高等级来向订单添加条件:
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 行的计算结果为“假,真”,这对将假条件置于顶部进行排序。
$sql = "SELECT * FROM employees ORDER BY CASE WHEN state = \'New York\' THEN 0 ELSE 1 END, state";