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

时间:2013-03-06 04:48:28

标签: php mysql keyword-search

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

product_id | product_name |关键字

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 应该采用更高的优先级而不是其他记录。

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

2 个答案:

答案 0 :(得分:1)

只需使用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

答案 1 :(得分:0)

leftclickben是关于你应该如何构建表格的。

但是,如果您想继续这样做,那么以下内容将起作用

keywords LIKE '2,%' OR keyword LIKE '%,2,%' OR keyword LIKE '%,4,%' OR keyword LIKE '%,4,%'

小心 - 对逗号和空格的位置保持一致。