0

次のクエリを使用して、現在完全に機能している特定のカテゴリに割り当てられた結果をフィルタリングしてスコア付けしています。ただし、タグの一致をスコアリングに含めることができるように別の結合を実行しようとすると、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

2番目の結合を追加すると、次の行が機能しなくなったかのようです

HAVING COUNT(c.c_ID) = 3

私はここで途方に暮れています。どんな助けでも大歓迎です!

4

1 に答える 1

1

元のcount()データと一致する新しい結合に複数の行があるため、失敗しています。 Count()null 以外の値をカウントします。したがって、ID ごとに 2 つの一致がある場合は、6 つの行が取得され、カウントは 6 になります。

次の方法で問題が解決すると思います。

having count(distinct c.c_id) = 3
于 2013-04-25T13:32:27.130 に答える