关于匹配度查询

用户表
ID,姓名,性别,学历,城市…..

现在查询 男,本科,广州
列出如下数据
XXX,男,本科,广州 100%匹配
XXX,女,本科,广州 66%匹配
XXX,男,大专,广州 66%匹配
…….

这样的SQL怎么样写呢?

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 4

暂时只想到这种方法,不知道有没有更好的

SELECT
    a.*,
    CONCAT(
        TRUNCATE ((
            IF
                ( ISNULL( b.id ), 0, 1 )+
            IF
                ( ISNULL( c.id ), 0, 1 )+
            IF
                ( ISNULL( d.id ), 0, 1 ))/ 3 * 100,
            0 
        ),
        '%' 
    ) AS ratio 
FROM
    users a
    LEFT JOIN ( SELECT id FROM users WHERE sex = '男' ) b ON a.id = b.id
    LEFT JOIN ( SELECT id FROM users WHERE education = '本科' ) c ON a.id = c.id
    LEFT JOIN ( SELECT id FROM users WHERE city = '广州' ) d ON a.id = d.id
3年前 评论

试下用elasticsearch,mysql不是做查询的服务,你上面的写法数据量一大就会有慢查询的,生产环境不能用这种sql语句

3年前 评论

为什么不放到应用层去处理呢?

3年前 评论
半人间 (楼主) 3年前

要么你就用or条件把数据都查出来然后用代码处理,要么就用专业的搜索引擎,如:elasticsearch

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!