2017-02-10 44 views
1

我试图做一个SQL请求,找到匹配请求的最佳项目。SQL如何找到具有不同权重的项目匹配关键字?

我有关键字有不同的权重(非常重要的关键字,重要的关键字等),我想按结果排序结果顺序。

我的表:ID,字段,值。

字段可以是“productName”或“productdescription”,值是文本。

我不知道如何将权重添加到每个关键字,并计算每个项目的分数。

我只是用现在的LIKE syntaxe:

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可以在那里使用,但如何将砝码添加到关键字?

感谢很多提前

回答

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; 
相关问题