我有类似以下的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 :(得分:0)
首先,我认为在SELECT中再次使用UPC = '123455778'
是多余的。你不会得到任何不正确的行,所以为什么不使用“1”?
话虽如此,我认为您的问题是运营秩序。将括号中的比较括在我身上:
SELECT
`UPC`,
(`UPC` = '12346790') * 16 AS Relevance
FROM
`products`
WHERE
`UPC` = '12346790'
HAVING
Relevance > 1
ORDER BY
Relevance DESC