我有一个问题,就是在我的数据库中找到一个特定的单词,给出一些关键字。
这是我的数据库:
我想要一个查询,它只返回这个关键字中的单词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"。
答案 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
}
});
});
如果你有一个相关的关键字表而不是一列中的多个关键字,那么这个查询会更容易编写并且更快。