2009-11-24 44 views
0

我有类似如下的MySQL查询:如何增加高级MySQL查询中的相关性值?

SELECT *, MATCH (`Description`) AGAINST ('+ipod +touch ' IN BOOLEAN MODE) * 8 + MATCH(`Description`) AGAINST ('ipod touch' IN BOOLEAN MODE) AS Relevance 
FROM products WHERE (MATCH (`Description`) AGAINST ('+ipod +touch' IN BOOLEAN MODE) OR MATCH(`LongDescription`) AGAINST ('+ipod +touch' IN BOOLEAN MODE)) 
HAVING Relevance > 1 
ORDER BY Relevance DESC 

现在,我所做的查询也通过搜索UPC更先进:

SELECT *, MATCH (`Description`) AGAINST ('+ipod +touch ' IN BOOLEAN MODE) * 8 + MATCH(`Description`) AGAINST ('ipod touch' IN BOOLEAN MODE) + `UPC` = '123456789012' * 16 AS Relevance 
FROM products WHERE (MATCH (`Description`) AGAINST ('+ipod +touch' IN BOOLEAN MODE) OR MATCH(`LongDescription`) AGAINST ('+ipod +touch' IN BOOLEAN MODE)) AND `UPC` = '123456789012' 
HAVING Relevance > 1 
ORDER BY Relevance DESC 

那将返回结果,但是我在UPC上获得了成功的比赛并不会增加价值Relevance。我只能进行像MATCH()AGAINST()这样的全文搜索的计算吗?

澄清:好的,所以我真正的问题是,为什么以下没有相关性> = 16?

SELECT `UPC`, `UPC` = '123456789012' * 16 AS Relevance FROM products WHERE `UPC` = '123456789012' HAVING Relevance > 1 ORDER BY Relevance DESC 

回答

0

首先,我认为这是多余的SELECT再次使用UPC = '123455778'。你不会得到任何不是真的行,那么为什么不使用“1”呢?

话虽如此,我认为你的问题是操作的顺序。括号中的括号比较适用于我:

SELECT 
    `UPC`, 
    (`UPC` = '12346790') * 16 AS Relevance 
FROM 
    `products` 
WHERE 
    `UPC` = '12346790' 
HAVING 
    Relevance > 1 
ORDER BY 
    Relevance DESC