多个mysql连接导致查询问题

时间:2013-04-25 13:08:21

标签: mysql join match distinct having

我正在使用以下查询来过滤和评分分配给某些类别的结果,这些结果现在正常运行。但是,如果我尝试进行另一次连接,为了能够将标记匹配考虑到评分,我会遇到一个问题,其中返回了大量未分配给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

我在这里不知所措,任何帮助都将不胜感激!

1 个答案:

答案 0 :(得分:1)

count()失败,因为新联接中有多行与原始数据匹配。 Count()计算非空值。所以,如果每个id有两个匹配,那么你将获得6行 - 并且计数为6。

我认为以下内容可以解决您的问题:

having count(distinct c.c_id) = 3