0

DB で検索する文があります。ストップ ワードを削除し、それを変数のキーワードの配列に分割しました。つまり、$key[0]、$key[1]、$key[2] です。キーワードの最大一致数の順にデータを取得する方法はありますか? .

助けてください。

今私は使用しています

SELECT * 
FROM 'table' 
WHERE ('colomn' LIKE '%$key1%' 
    AND 'colomn' LIKE '%$key2%'
    AND 'colomn' like '%$key3%'
      );

結果がなければ

SELECT * 
FROM   'table' 
WHERE ('colomn' LIKE '%$key1%' 
     OR 'colomn' LIKE '%$key2%' 
     OR 'colomn' LIKE '%$key3%'
       );
4

2 に答える 2

3

MySQLはこれで非常にかわいいです:

SELECT *, (colomn like "%$key1%") + (colomn like "%$key2%") + (colomn like "%$key3%") as match_rate
FROM table
WHERE (colomn like "%$key1%" or colomn like "%$key2%" or colomn like "%$key3%")
ORDER BY match_rate DESC;
于 2013-06-02T14:11:47.557 に答える
1

テーブル名と列名を一重引用符で囲んではいけません。代わりにバッククォートを使用してください。

そのように

 Select * from `table` where (`colomn`....

それ以外の

 Select * from 'table' where ('colomn'........

OR で 2 番目のクエリを使用する

私はあなたがそのようなものを探していると思います

 order by case 
      when `colomn` LIKE "%$key1%" and `colomn` LIKE "%$key2%" and `colomn` LIKE "%$key3%" then 1 
      when (`colomn` LIKE "%$key1%" and `colomn` LIKE "%$key2%")  or (`colomn` LIKE "%$key1%" and `colomn` LIKE "%$key3%") or (`colomn` LIKE "%$key3%" and `colomn` LIKE "%$key2%") then 2 
    else 3 
 end
于 2013-06-02T12:00:42.067 に答える