1

mysql のフィールドに基づいて結果をソートする際に問題に直面しています。たとえば、「Terms」という単語を検索すると、最初に「Terms」で始まり、次に「Terms and」、次に「Terms and conditions」という結果が得られるはずです。

私の要件に基づいて、mysqlクエリを使用して効率的な方法で検索結果を取得する人を助けてください。

4

4 に答える 4

1
SELECT * FROM your_table WHERE your_column LIKE "Terms%" ORDER BY your_column;
于 2013-08-13T14:19:28.680 に答える
0

ストレージ エンジンと 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'));
于 2013-08-13T14:26:26.997 に答える
0

プレフィックス文字列を検索する場合は、フルテキスト インデックスを使用しないでください。

オプティマイザーを使用すると、次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エンコーディングを使用すると、違いが生じます。

于 2013-08-13T14:30:51.763 に答える