我正在尝试发出一个SQL请求,以查找与请求匹配的最佳项目。
我的关键字具有不同的权重(非常重要的关键字、重要的关键字等)我想按分数对结果进行排序。
我的表: ID,field,value。
字段可以是"productName“或"productdescription”,value为文本。
我不知道如何给每个关键字添加权重,以及如何计算每个项目的得分。
我现在只使用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可以在那里使用,但是如何向关键字添加权重呢?
发布于 2017-02-10 22:45:30
这个问题的最好答案是不要把字符串当作关键字的列表!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;https://stackoverflow.com/questions/42161618
复制相似问题