php - 如何根据产品区域中给定的关键字显示最相关的内容?

标签 php mysql keyword-search

我正在创建一个产品区域。所有产品中都有一些关键字 ID。我要实现的是,如果选择了一个产品,我想显示最相关的 页面下方的其他产品。例如数据,

产品编号 |产品名称 |关键词

23     | product1     | 2,4,13
31     | product3     | 2,4,8
10     | product6     | 2,4
11     | product4     | 2,3
34     | product2     | 2,4
54     | product5     | 2,7
12     | product8     | 4,8

假设我必须显示产品的相关产品包含关键字 2 和 4。 目前我正在使用以下获取相关产品

$sql="SELECT * FROM table1 WHERE keywords REGEXP '(^|,)2(,|$)' OR keywords REGEXP '(^|,)4(,|$)' ORDER BY product_id"

但有时这不会返回主要相关的产品。

对于上面的示例数据,product_id 23,31,10,34应该比其他记录具有更高的优先级。

这可能吗?那我应该怎么做才能克服这个问题呢?感谢所有回复。

最佳答案

只需使用 FIND_IN_SET

SQLFiddle demo

select t.*,
SIGN(FIND_IN_SET('2',keywords))+SIGN(FIND_IN_SET('4',keywords))
as FindWeight
from t
where 
SIGN(FIND_IN_SET('2',keywords))+SIGN(FIND_IN_SET('4',keywords))>0
ORDER BY FindWeight DESC

关于php - 如何根据产品区域中给定的关键字显示最相关的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15239209/

相关文章:

mysql - 谁知道这个sql注入(inject)?

ios - 当我输入应用程序元数据中定义的关键字时,AppStore 搜索找不到我的应用程序

theory - 关键字研究/分析软件如何[理论上]工作?

php - 检查用户名可用性问题

mysql查询多列值的总和,其中列名来自选择列表

php - mysqli 绑定(bind)参数变量数量错误

java - Lucene搜索引擎中使用自建方法

php - 从下拉列表中调用一个值来更新查询

php - 只有使用用户 ID 1 登录才能看到好友列表

php - 在 cakephp 中执行此操作的最佳方法是什么