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

标签 php mysql database search

我无法在数据库中找到给出一些关键字的特定单词。

这是我的数据库:

mydb

我想要一个仅返回以下关键字中的单词“自行车”的查询:车轮踏板链。

我尝试使用此代码:

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/

相关文章:

mysql - 自动数据库迁移 (MysQl)

mysql - 在 MySQL 的列中为某些值添加前导零

java - 无法解析符号 'MODE_PRIVATE'

用于跟踪对象的数据库表

php - 未收到 Adyen 回调

java - MySQL:超出范围,但该列不是最后一个?

MySQL查询统计反馈表不同列中1的出现次数

php - 匹配 url 中的特定正则表达式单词

php - View 不反射(reflect)数据库的更新

php - 在页面的不同部分显示 MySQL 结果