2016-06-11 7 views
1

フィールド 'descript'とこれらのサンプル値を持つmysqlテーブルがあります。最良の結果で分けて

select * from table where descript like '%ali%' 

それは選択の結果は、最も関連性の高いを購入ソートすることが可能です:

malik 
ali 
dali 
other ali 

は次のようにmysqlのクエリがありますか? したがって、この例では、私はそれを持ってしたいと思います: 1.アリ 2.他のアリ 3.ダリ/マリク...

+0

あなたは 'descript'列の[フルテキストインデックス](http://dev.mysql.com/doc/refman/5.7/en/fulltext-search.html)が必要です。オプションで、一流のテキスト関連性の検索が必要な場合は、[elasticsearch](https://www.elastic.co/products/elasticsearch)のようなジョブ用に特別に作成されたツールをお勧めします。 – adamb

+0

[MySQL order by関連性](http://stackoverflow.com/questions/15026244/mysql-order-by-relevance) –

答えて

1

巣の結果と同様に使用でき、そのことで一致したさまざまな種類の関連性、および順序を計算するCASE表現を使用することができます。

ORDER BY CASE 
    WHEN descript = 'ali' THEN 1 -- exact match 
    WHEN descript REGEXP '[[:<:]]ali[[:>:]]' THEN 2 -- whole word 
    ELSE 3 -- anything else 
END ASC 

DEMO

0

あなたは、文字列の最初の出現OOF位置をretriveために見つけ使用することができますし、

select * from table where descript like '%ali%' 
order by locate('ali', descript) asc 
+0

これは 'other ali'の前に' dali'と 'malik'を表示します。 – Barmar

関連する問題