従業員という名前のMySQLテーブルがあります
1. id
2. employee
3. state
「ニューヨーク」という名前の州が最初に来て、他のすべてのレコードが正常に来るデータベースを照会する方法がわかりません。これが私がこれまでに持っているものです
$sql = "select * from employees order by";
最も簡単なオプション:
ORDER BY (state = 'New York') DESC, state
は1(true)または0(false)のいずれかを返すため(state = 'New York')
、ニューヨーク(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 を 2 回綴っていることに気付きました。データを操作するには、上記の修正を解除する必要があるかもしれません。「desc」を指定すると、順序が昇順ではなく降順になり、「真」の値が最初になります。
JClaspill が指摘しているように、「ニューヨーク」に相当する州のないレコードは、州順ではなく自然に並べ替えられます。ステートメントに追加, state
すると、order by
他のレコードは州のアルファベット順に並べ替えられますが、"New York" レコードが最初に保持されます。
$sql = "SELECT * FROM employees ORDER BY CASE WHEN state = \'New York\' THEN 0 ELSE 1 END, state";
関連する状態を上位のランクに強制する条件を注文に追加できます。
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 行で「False, True」と評価され、False 条件が一番上になるように並べ替えられます。