2

我正在创建一个产品区域。所有产品中都有一些关键字 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应该优先于其他记录。

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

4

2 回答 2

1

只需使用FIND_IN_SET

SQLFiddle 演示

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
于 2013-03-06T05:23:47.167 回答
0

leftclickben 关于您应该如何构建表格是正确的。

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

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

小心 - 逗号和空格的放置要非常一致。

于 2013-03-06T05:18:59.500 回答