关于匹配度查询

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

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

这样的SQL怎么样写呢?

《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 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年前 评论

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