是否有更好的查询来获得最匹配的结果

发布于 2025-01-25 21:00:06 字数 1210 浏览 2 评论 0原文

我正在尝试使用匹配对抗最匹配的结果。
我的第一个查询正常工作,但它使用filesort。
第二个查询也效果很好,但是查询复制并看起来很混乱。

我如何优化查询?
为了参考,索引列为class_id和name。

*仅与匹配的查询

    SELECT id, name, MATCH (name) AGAINST('john smi') AS score
    FROM member
    WHERE class_id=5
    AND MATCH (name) AGAINST('john smi');

”在此处输入图像描述” 我想要的是两个最高得分的最高值。

*我的第一个查询

    SELECT * FROM (
        SELECT id, name, MATCH (name) AGAINST('john smi') AS score, dense_rank() over (order by  MATCH (name) AGAINST('john smi') desc) ranking
        FROM member
        WHERE class_id=5
        AND MATCH (name) AGAINST('john smi')
    )t where t.ranking = 1;

*第二查询

    SELECT id, name, MATCH (name) AGAINST('john smi') AS score
    FROM member
    WHERE class_id=5
    AND MATCH (name) AGAINST('john smi') AND MATCH (name) AGAINST('john smi') >= (
        SELECT MATCH (name) AGAINST('john smi')
        FROM member
        WHERE class_id=5
        AND MATCH (name) AGAINST('john smi') limit 1
    )l

I'm trying to get most matched result using MATCH AGAINST.
My first query works correctly, but it using filesort.
And the second query also works well, but the query is duplicated and looks messy.

How can I optimize my query?
For reference, the index columns are class_id and name.

*query with match against only

    SELECT id, name, MATCH (name) AGAINST('john smi') AS score
    FROM member
    WHERE class_id=5
    AND MATCH (name) AGAINST('john smi');

enter image description here
What I want is two top values ​​with the highest score.

*my first query

    SELECT * FROM (
        SELECT id, name, MATCH (name) AGAINST('john smi') AS score, dense_rank() over (order by  MATCH (name) AGAINST('john smi') desc) ranking
        FROM member
        WHERE class_id=5
        AND MATCH (name) AGAINST('john smi')
    )t where t.ranking = 1;

*second query

    SELECT id, name, MATCH (name) AGAINST('john smi') AS score
    FROM member
    WHERE class_id=5
    AND MATCH (name) AGAINST('john smi') AND MATCH (name) AGAINST('john smi') >= (
        SELECT MATCH (name) AGAINST('john smi')
        FROM member
        WHERE class_id=5
        AND MATCH (name) AGAINST('john smi') limit 1
    )l

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文