我无法在数据库中找到给出一些关键字的特定单词。
这是我的数据库:
我想要一个仅返回以下关键字中的单词“自行车”的查询:车轮踏板链。
我尝试使用此代码:
SELECT *
FROM mydb
WHERE keywords LIKE '%wheels%' AND keywords LIKE '%pedals%' AND keywords LIKE '%chain%'
但是查询没有给出任何结果,因为 mydb 中不存在关键字“chain”。
我也尝试了其他查询:
SELECT *
FROM mydb
WHERE keywords LIKE '%wheels%' OR keywords LIKE '%pedals%' OR keywords LIKE '%chain%'
查询返回所有单词(汽车、火车、自行车)。
我的范围是尝试通过搜索定义自行车的单词来猜测像“自行车”这样的单词,因此,如果我在搜索字符串中插入未在数据库中列出的关键字,仍然应该得到结果“自行车” ”。 例如,如果我输入关键字“wheels”“pedals”以及未包含在我的数据库中的关键字(例如“chain”),则它应该返回“bike”。
最佳答案
你可以做到这一点。您只需计算匹配的关键字数量,然后按该计数对表格进行排序。
匹配这样的关键字之一:(keywords LIKE '%wheels%')
将返回一个 bool 值,在 MySQL 中用 1(真)或 0(假)表示。因此,只需将所有关键字匹配添加在一起,如下所示:
(keywords LIKE '%wheels%') + (keywords LIKE '%pedals') + (keywords LIKE '%chain%')
然后按总和排序。如果按降序排序并选择第一行,它应该是最佳匹配。
SELECT mydb.*,
((keywords LIKE '%wheels%') +
(keywords LIKE '%pedals') +
(keywords LIKE '%chain%')) AS best_match
FROM mydb
ORDER BY best_match DESC
LIMIT 1;
确实,如果您有一个相关的关键字表而不是一列中有多个关键字,那么此查询会更容易编写并且速度更快。
关于php - 查找数据库中与最多关键字匹配的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34352712/