mysql のフィールドに基づいて結果をソートする際に問題に直面しています。たとえば、「Terms」という単語を検索すると、最初に「Terms」で始まり、次に「Terms and」、次に「Terms and conditions」という結果が得られるはずです。
私の要件に基づいて、mysqlクエリを使用して効率的な方法で検索結果を取得する人を助けてください。
mysql のフィールドに基づいて結果をソートする際に問題に直面しています。たとえば、「Terms」という単語を検索すると、最初に「Terms」で始まり、次に「Terms and」、次に「Terms and conditions」という結果が得られるはずです。
私の要件に基づいて、mysqlクエリを使用して効率的な方法で検索結果を取得する人を助けてください。
SELECT * FROM your_table WHERE your_column LIKE "Terms%" ORDER BY your_column;
ストレージ エンジンと mysql のバージョンに基づいて、おそらく MySQL の全文検索機能を使用できます。例えば:
SELECT *, MATCH (your_column) AGAINST ('Terms' IN BOOLEAN MODE) AS relevance
FROM your_table
WHERE MATCH (your_column) AGAINST ('Terms' IN BOOLEAN MODE)
ORDER BY relevance
ここで詳細情報を見つけることができます: http://dev.mysql.com/doc/refman/5.5/en/fulltext-boolean.html
または、FTS を使用したくない場合は、順序付けが文字列の長さ (差) に厳密に基づく別の可能な解決策があります。
SELECT * FROM your_table WHERE your_column LIKE "Terms%" ORDER BY ABS(LENGTH(your_column) - LENGTH('Terms'));
プレフィックス文字列を検索する場合は、フルテキスト インデックスを使用しないでください。
オプティマイザーを使用すると、次LIKE "Term%"
の潜在的なインデックスを使用できますyour_column
。
SELECT * FROM your_table
WHERE your_column LIKE "Terms%"
ORDER BY CHAR_LENGTH(your_column),your_column
句に注意してくださいORDER BY
。最初に文字列の長さで並べ替え、アルファベット順のみを使用して同じ長さの文字列を並べ替えます。
そして、最初に文字数をカウントするのではCHAR_LENGTH
なく、後でバイト数をカウントするように使用してください。utf8 などの可変長LENGTH
エンコーディングを使用すると、違いが生じます。