我正在尝试发出一个SQL请求,找到与请求匹配的最佳项目。
我的关键字具有不同的权重(非常重要的关键字,重要的关键字等)。我想按分数对结果顺序进行排序。
我的表:ID,字段,值。
字段可以是“productName”或“productdescription”,值是文本。
我不知道如何为每个关键字添加权重,以及计算每个项目的得分。
我现在只使用LIKE
语法:
SELECT id FROM products
WHERE (field='productname'
AND value LIKE '%KEYWORD1%'
AND value LIKE ‘%KEYWORD2% … )
OR (field='productdescription'
AND value LIKE '%KEYWORD1%' AND value LIKE '%KEYWORD2%'..)
我知道可以在那里使用语法MATCH-AGAINST
,但是如何在关键字中添加权重?
答案 0 :(得分:1)
这个问题的最佳答案是不将字符串视为关键字列表! SQL为列表提供了非常好的数据结构。它被称为表,而不是列。
有时,我们会遇到其他人非常糟糕的设计决策。我认为最好的方法是"派生表"使用关键字和权重,然后是这样的逻辑:
SELECT p.id
FROM products p JOIN
(SELECT 'KEYWORD1' as kw, 1 as weight UNION ALL
SELECT 'KEYWORD2' as kw, 10 as weight UNION ALL
SELECT 'KEYWORD3' as kw, 10 as weight
) kw
ON (p.field IN ('productname', 'productdescription') AND
p.value LIKE CONCAT('%', kw.kw, '%')
)
GROUP BY p.id
ORDER BY SUM(weight) DESC;