如何使用MYSQL生成分数时检查所有联接

Mar*_*unt 11 mysql search boolean join match-against

我正在使用MYSQL为查询返回的每个结果生成一个分数.然后按分数排序结果.

似乎没有正常工作的部分是我正在尝试为已搜索的每个标记添加分数并将结果分配给.所以我要说我搜索标签"example","test and"tag"并将我的一个结果分配给标签"example","test","someothertag"它应该得到10分因为有2场比赛.

实际情况是,如果匹配,我得分为5,无论匹配多少标签.如果没有匹配的标签,则为0.

以下是从搜索生成的查询之一的示例.

        SELECT DISTINCT results.*,
                    ( 
                        5*(MATCH(tags.name) AGAINST('"self employed"' IN BOOLEAN MODE)) +
            5*(MATCH(tags.name) AGAINST('"rental income"' IN BOOLEAN MODE)) +
            5*(MATCH(tags.name) AGAINST('"commission income"' IN BOOLEAN MODE)) +
            5*(MATCH(tags.name) AGAINST('"bankruptcy"' IN BOOLEAN MODE)) +
            5*(MATCH(tags.name) AGAINST('"condo approval"' IN BOOLEAN MODE)) +

                        1*usefulness + 
                        10*shares 
                    ) AS score 
        FROM results
        INNER JOIN categories c on results.ID = c.RESULT_ID
        INNER JOIN tags ON results.id = tags.result_id
        WHERE c.name in ('purchase', 'condo', 'va')
        AND ( tags.name = 'self employed' OR tags.name = 'rental income' OR tags.name = 'commission income' OR tags.name = 'bankruptcy' OR tags.name = 'condo approval'  )
        AND ( results.scope = 'all' OR results.scope = 'hi' )
        AND published = 1

        GROUP BY results.ID
        having count(distinct c.c_id) = 3
        ORDER BY score DESC 
        LIMIT 8 OFFSET 0
Run Code Online (Sandbox Code Playgroud)

小智 0

您需要对分数进行 SUM(),因为一行仅匹配一个标签。

在您的查询中,选择了多行并按 ID 对它们进行分组,因此您仅获得一行的结果,并且在您的情况下始终为 5。