查找与数据库中大多数关键字匹配的记录

时间:2015-12-18 09:50:55

标签: php mysql database search

我有一个问题,就是在我的数据库中找到一个特定的单词,给出一些关键字。

这是我的数据库:

mydb

我想要一个查询,它只返回这个关键字中的单词bike:wheels pedal链。

我尝试使用此代码:

SELECT * 
FROM mydb 
WHERE keywords LIKE '%wheels%' AND keywords LIKE '%pedals%' AND keywords LIKE '%chain%'

但查询没有给出任何结果,因为关键字"链"在mydb中不存在。

我还尝试了其他查询:

SELECT * 
FROM mydb 
WHERE keywords LIKE '%wheels%' OR keywords LIKE '%pedals%' OR keywords LIKE '%chain%' 

查询返回所有单词(汽车,火车,自行车)。

我的范围是尝试猜测像#" bike"通过搜索定义自行车的单词,所以如果我在搜索字符串中插入未在数据库中列出的关键字,仍然应该得到结果" bike"。 例如,如果我键入关键字" wheels" "踏板"和一个不包含在我的数据库中的关键字,如"链"它应该返回" bike"。

4 个答案:

答案 0 :(得分:0)

好的,所以你的第一个查询什么都不返回,因为数据库中没有包含你指定的所有单词的记录。

第二个查询返回所有记录,因为它们都包含“轮子”。

尝试你的第一个查询但不寻找“链”,这应该只返回自行车。

答案 1 :(得分:0)

您可以通过此查询简单地返回自行车

SELECT * FROM `stackoverflow` WHERE `title` LIKE '%bike%'

答案 2 :(得分:0)

试试这个

SELECT *  FROM mydb  
    WHERE keywords LIKE '%wheels%pedals%' 

答案 3 :(得分:0)

你可以这样做。您只需计算匹配的关键字数量,然后按该计数对表格进行排序。

匹配其中一个关键字:(keywords LIKE '%wheels%') + (keywords LIKE '%pedals') + (keywords LIKE '%chain%') 将返回一个布尔值,在MySQL中用1(真)或0(假)表示。因此,只需将所有关键字匹配组合在一起,如下所示:

SELECT mydb.*, 
    ((keywords LIKE '%wheels%') + 
    (keywords LIKE '%pedals') + 
    (keywords LIKE '%chain%')) AS best_match
FROM mydb
ORDER BY best_match DESC
LIMIT 1;

然后用这笔钱排序。如果按降序排序并选择第一行,则应该是最佳匹配。

jQuery('body').on('click','yourlink',function(e){
    e.preventDefaul;
    $.ajax({
        url: 'url here',
        type: 'POST',
        success: function() {
        //go to desired url
            window.location.replace = 'the url to navigate to';
        },
        error : function(){
         //ajax error handling code here
        }
     });
});

如果你有一个相关的关键字表而不是一列中的多个关键字,那么这个查询会更容易编写并且更快。