2013-06-02 86 views
0

我有一个句子,它将在DB.I中删除停止词并将其分成一个变量,如$ 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%' 
     ); 
+0

这不是确切的代码,我刚才解释了我的工作原理 –

+0

看我编辑的答案 –

回答

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; 
+0

thaks a它的作品很多.....但它似乎很慢(0.058秒) –

1

不使用围绕表单引号和列名,而不是使用反引号

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

代替

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

使用第二位或查询

我觉得你看起来类似的东西

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