web-dev-qa-db-ja.com

mysql-where句の最初の条件で並べ替え

次のフィールドで構成されるテーブルがあります

id, name

次の値

1, ciro
2, test ciro
3, ciprox
4, other
5, other

「ci」で始まるか「ci」を含むすべての値を取得したいのですが、ciで始まる前に残りの結果を表示します。

クエリ

select * FROM table WHERE name like 'ci%' or name like '%ci%' order by name;

戻る

1, ciro
2, test ciro
3, ciprox

が欲しいです

1, ciro
3, ciprox
2, test ciro

したがって、名前が「ci」で始まる行の前に、次に

2つのクエリを使用せずに結果を取得する方法はありますか?

3
ciro

これはよくある問題です。 case式がここで役立ちます。 (テストされていない)のようなクエリ

select *
from table
where name like '%ci%'
order by case when name like 'ci%' then 0 else 1 end, name;

あなたがしたいことをする必要があります。

8
Colin 't Hart

あなたは親子クエリに行くべきです。子クエリまたは内部クエリはソートされたセットを返し、外部クエリでは条件を置くだけです。

select * from (
  select * from `table_name` order by attribute asc) as sample_table_name 
where attribute >=x;
0
Dila Gurung

ORDER BY CASEを使用して、特定の目的に合った方法でアイテムを並べ替える必要があります。

使用例は here および here を参照してください。

CASE演算子の詳細 ここ

0
Nelz