ライブ検索を使用してそのテーブルを検索するための単語と入力フィールドを含むテーブルがあります。現在、次のクエリを使用してテーブルを検索しています。
SELECT Word FROM words WHERE Word LIKE '%searchstring%' ORDER BY Word ASC
Wordの先頭で文字列が見つかったものが最初に来て、Wordで文字列が後で現れるものが最後になるように結果を並べる方法はありますか?
例:「hab」を検索すると、現在返されます
しかし、私はそれをこのようにしたい:
または少なくともこの方法で:
誰かがこれで私を助けることができたら素晴らしいでしょう!
最初の方法(Wordを起動し、Wordの途中で終了し、Wordを終了する)を行うには、次のようにします。
SELECT Word
FROM words
WHERE Word LIKE '%searchstring%'
ORDER BY
CASE
WHEN Word LIKE 'searchstring%' THEN 1
WHEN Word LIKE '%searchstring' THEN 3
ELSE 2
END
2番目の方法(一致した文字列の位置)で行うには、 LOCATE
function を使用します。
SELECT Word
FROM words
WHERE Word LIKE '%searchstring%'
ORDER BY LOCATE('searchstring', Word)
たとえば、複数のWordがhab
で始まる場合にタイブレーカーが必要になる場合もあります。それを行うには、次のことをお勧めします。
SELECT Word
FROM words
WHERE Word LIKE '%searchstring%'
ORDER BY <whatever>, Word
hab
で始まる複数の単語の場合、hab
で始まる単語はグループ化され、アルファベット順にソートされます。
この方法を試してください:
SELECT Word
FROM words
WHERE Word LIKE '%searchstring%'
ORDER BY CASE WHEN Word = 'searchstring' THEN 0
WHEN Word LIKE 'searchstring%' THEN 1
WHEN Word LIKE '%searchstring%' THEN 2
WHEN Word LIKE '%searchstring' THEN 3
ELSE 4
END, Word ASC
INSTR
関数を使用して、Word内の検索文字列の開始位置を返すことができます。
ORDER BY INSTR(Word,searchstring)
検索文字列が2つの異なる単語の同じ位置にある場合に結果セットをより確定的にするには、ORDER BYに2番目の式を追加します。
ORDER BY INSTR(Word,searchstring), Word
(たとえば、検索文字列hab
は、chablis
とshabby
の両方の2番目の位置に表示されます)