SELECT *
FROM address
WHERE name LIKE 'a%' OR name LIKE '% a%' LIMIT 10
このクエリは、先頭
または途中の単語で name
始まる を取得します。最初から結果を取得するにはどうすればよい
ですか?a
'a%'
'% a%'
LIKE 'a%'
LIKE '% a%'
ORDER BY
句を追加し、
SELECT *
FROM address
WHERE name LIKE 'a%' OR name LIKE '% a%'
ORDER BY CASE WHEN name LIKE 'a%' THEN 0 ELSE 1 END
LIMIT 10
ここにあります:
SELECT t1.*
FROM (
SELECT *
FROM address
WHERE name LIKE 'a%'
LIMIT 10
) t1
WHERE t1.name LIKE '% a%'
1 つの方法は、クエリに ORDER BY 句を追加することです。
ORDER BY IF(name LIKE 'a%',1,2)
このようなもの:
SELECT *
FROM address
WHERE name LIKE 'a%' OR name LIKE '% a%'
ORDER BY IF(name LIKE 'a%',1,2)
LIMIT 10
大規模なセット (つまり、アドレス内の多数の行) での "ファイルソートの使用" 操作を回避し、10 行のみを返したい場合は、並べ替える行の数を制限することで、より複雑に見えるクエリのパフォーマンスが向上する可能性があります。
SELECT c.*
FROM ( SELECT a.*
FROM (
SELECT *
FROM address
WHERE name LIKE 'a%'
LIMIT 10
) a
UNION ALL
SELECT b.*
FROM address b
WHERE b.name LIKE '% a%' AND b.name NOT LIKE 'a%'
LIMIT 10
) c
ORDER BY c.name LIKE 'a%' DESC
LIMIT 10