V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Renco
V2EX  ›  Java

多个查询条件 有一个条件匹配就查出 排序按照条件匹配最多的顺序排 要怎么实现

  •  
  •   Renco · 2020-04-15 23:55:05 +08:00 · 1786 次点击
    这是一个创建于 1713 天前的主题,其中的信息可能已经有所发展或是发生改变。

    比如有一张资料表 字段信息如下

    |----品牌----|

    |----型号----|

    |----名字----|

    |----规格----|

    |----大小----|

    |----资料内容----|

    然后品牌、型号、名字、规格、大小是搜索条件,5 个条件全输入 只要符合一个条件就可以查询出来,然后按照匹配查询条件越多的,排序往前

    比如查询

    • 品牌 A 型号 A 名字 A 规格 A 大小 A

    查询结果的排序顺序为

    • 品牌 A 型号 A 名字 A 规格 A 大小 B 资料内容
    • 品牌 A 型号 A 名字 A 规格 B 大小 B 资料内容
    • 品牌 A 型号 B 名字 C 规格 C 大小 D 资料内容

    这种的 SQL 怎么实现。。我第一反应是写多条查询语句 从 5 条查到 4 条查到 3 条查到一条往下这种方式加到 list 里返回

    4 条回复    2020-06-05 10:55:43 +08:00
    lululau
        1
    lululau  
       2020-04-15 23:59:37 +08:00 via iPhone
    es 吧,sql 的话不能排序,排序放在内存做
    reus
        2
    reus  
       2020-04-16 09:31:57 +08:00 via Android   ❤️ 4
    bool 转成 int,然后取结果大于等于 1 的,排序就是按大小排。
    Habyss
        3
    Habyss  
       2020-04-16 11:33:28 +08:00
    @reus 点个赞
    gdev
        4
    gdev  
       2020-06-05 10:55:43 +08:00
    SELECT * FROM 资料表 AS t1
    LEFT JOIN(
    SELECT id,IF(`品牌` = '品牌 A',1,0) c1,IF(`型号` = '型号 A',1,0) c2,IF(`名字` = '名字 A',1,0) c3,IF(`规格` = '规格 A',1,0) c4 FROM 资料表
    ) AS orderTable
    ON t1.id = orderTable.id
    ORDER BY (c1+c2+c3+c4) DESC
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3257 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 12:24 · PVG 20:24 · LAX 04:24 · JFK 07:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.