我正在使用以下查询来过滤和评分分配给某些类别的结果,这些结果现在正常运行。但是,如果我尝试进行另一次连接,为了能够将标记匹配考虑到评分,我会遇到一个问题,其中返回了大量未分配给3个类别的结果。
这是工作查询...
SELECT DISTINCT results.*,
(
3*(MATCH(body) AGAINST('*' IN BOOLEAN MODE)) +
5*(MATCH(title) AGAINST('*' IN BOOLEAN MODE)) +
1*usefulness +
30*(MATCH(body) AGAINST('""' IN BOOLEAN MODE)) +
20*(MATCH(title) AGAINST('""' IN BOOLEAN MODE)) +
5*shares
) AS score
FROM results
INNER JOIN categories c on results.ID = c.RESULT_ID
WHERE c.name in ('refinance', 'condo', 'usda')
AND ( results.scope = 'all' OR results.scope = 'hi' )
AND published = 1
GROUP BY results.ID
HAVING COUNT(c.c_ID) = 3
ORDER BY score DESC
LIMIT 8 OFFSET 0
在类别结果下方添加以下行,是给我带来问题的原因
INNER JOIN tags ON results.id = tags.result_id
当我添加第二个连接
时,就好像以下行停止工作一样HAVING COUNT(c.c_ID) = 3
我在这里不知所措,任何帮助都将不胜感激!
答案 0 :(得分:1)
count()
失败,因为新联接中有多行与原始数据匹配。 Count()
计算非空值。所以,如果每个id有两个匹配,那么你将获得6行 - 并且计数为6。
我认为以下内容可以解决您的问题:
having count(distinct c.c_id) = 3