我正在创建一个产品领域。所有产品中都有一些关键字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 应该采用更高的优先级而不是其他记录。
这可能吗?那我该怎么做才能克服这个问题呢?感谢所有回复。
答案 0 :(得分:1)
只需使用FIND_IN_SET
即可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,%'
小心 - 对逗号和空格的位置保持一致。