2017-02-10 81 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; 
相關問題