次のフィールドで構成されるテーブルがあります
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つのクエリを使用せずに結果を取得する方法はありますか?
これはよくある問題です。 case
式がここで役立ちます。 (テストされていない)のようなクエリ
select *
from table
where name like '%ci%'
order by case when name like 'ci%' then 0 else 1 end, name;
あなたがしたいことをする必要があります。
あなたは親子クエリに行くべきです。子クエリまたは内部クエリはソートされたセットを返し、外部クエリでは条件を置くだけです。
select * from (
select * from `table_name` order by attribute asc) as sample_table_name
where attribute >=x;