2016-11-14 1 views
1

LIKE MySQLで一番上に最もマッチした結果を取得します。私はこのようなテーブルがあるとしましょう:は、クエリ

表:businesses

+----+------------------------+ 
| id | name     | 
+----+------------------------+ 
| 1 | Carolyn Wong Cakes  | 
| 2 | Cupcakin Cackes Shop | 
| 3 | Wong Cackes Shop  | 
| 4 | Indie Cakes & Pastries | 
+----+------------------------+ 

私は名前内部のいくつかの単語を検索しながら、best matched resultを取得したいです。 たとえば、検索したい:Wong Cackes Shopは3語です。
私は上記の検索のために、このクエリを使用します。

SELECT * FROM businesses WHERE ( 
    name LIKE '% Wong %' OR 
    name LIKE '% Cackes %' OR 
    name LIKE '% Shop %' 
) 

私はrecord 3は、最初に一致した結果であると期待していたが、結果は次のとおりです。2一致言葉

  • Cupcaking Cackes Shop //と

    1. Carolyn Wong Cakes // 2が一致する単語
    2. Wong Cackes Shop // 3と一致する単語

    単語を検索し、最も一致した結果のレコードを他の結果の上に表示するにはどうすればよいですか?このよう

    1. Wong Cackes Shop // 3とのマッチングワード
    2. Cupcaking Cackes Shop
    3. Carolyn Wong Cakes

    EDIT:メソッドのように私のword-boundariesにも問題があります。 3つの単語のうちの1つで開始または終了する結果は得られません。なぜなら例えばLIKE '% word %'
    のものspacesの:
    Wong[space] //
    [space]Wong[space]試合
    [space]Wong //が

    おかげと一致していない一致していません。

  • +0

    質問は他の質問に似ていると一致します:http://stackoverflow.com/questions/23153515/mysql-count-number-of-like-matches-per-entry – Bee157

    +0

    をあなたはFULLTEXTインデックスを見てきました? – Strawberry

    +0

    @Strawberry私のテーブルエンジンは 'innoDB'です。 FULLTEXTをサポートしていますか? – Pars

    答えて

    2

    を実装することになることは、あなたがしているので、あなたも、ここでWHERE句を削除することができますトリック

    SELECT 
        name, 
        ((name LIKE '%Wong%')+(name LIKE '%Cackes%') +(name LIKE '%Shop%')) as total 
    FROM businesses WHERE ( 
        name LIKE '%Wong%' OR 
        name LIKE '%Cackes%' OR 
        name LIKE '%Shop%' 
    ) 
    ORDER BY total DESC 
    

    を行う必要がありますちょうどヒットの合計数に興味があります。
    スペースの問題を克服するために、同様の節でそれらを削除するだけです。 %wong%[space]wong OR [space]wong[space]またはwong[space]

    +0

    編集した投稿をご覧ください。同様のクエリで 'スペース 'に問題があります。 – Pars

    +0

    ありがとうございます。これは問題を解決しました。 – Pars

    +0

    @ Bee157、スペースをなくした後、 "Workshop"のような問題が発生します。これらの言葉は異なる意味であり、検索結果のトップページに含まれます。 – Michael

    0

    単語のみを検索するので、正しく機能しています。あなたのケースでは、文字列全体のためにWong Cackes Shop(OR)最善を検索する必要があり、次のFULL TEXT検索