V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
U2FsdGVkX1
V2EX  ›  MySQL

多字段匹配情况下怎么优先查询某个字段

  •  
  •   U2FsdGVkX1 ·
    U2FsdGVkX1 · 2019-07-26 19:18:08 +08:00 · 4184 次点击
    这是一个创建于 1931 天前的主题,其中的信息可能已经有所发展或是发生改变。

    有个表有 title 和 context 字段,搜索的时候使用这个 SQL 匹配

    SELECT * FROM post WHERE title LIKE "%google%" OR context LIKE "%google%" LIMIT 10

    现在希望先匹配 title 字段,然后再匹配 context 字段……也就是结果 title 匹配在前,context 匹配在后

    如果 title 足够 10 个的话就不用再匹配 context 了

    搜了搜几乎没啥帮助(也有可能我不知道要怎么描述这个情况……),于是只能来问问了(

    1 条回复    2019-07-26 20:22:57 +08:00
    ywcjxf1515
        1
    ywcjxf1515  
       2019-07-26 20:22:57 +08:00   ❤️ 1
    一个未优化的思路:
    select * from(

    select *,1 as status from (
    select * from (SELECT * FROM post WHERE title like '%Linux%' limit 10) as a
    except
    select * from (SELECT * FROM post WHERE context like '%算法%' limit 10) as b)
    as c

    union

    select *,2 as status from (
    select * from (SELECT * FROM post WHERE context like '%算法%' limit 10) as d
    union
    select * from (SELECT * FROM post WHERE title like '%Linux%' limit 10) as e)
    as f

    union

    select *,3 as status from (
    select * from (SELECT * FROM post WHERE context like '%算法%' limit 10) as g
    except
    select * from (SELECT * FROM post WHERE title like '%Linux%' limit 10) as i
    ) as j

    )as s
    order by status limit 10;

    如果你使用 mysql 8.0,会容易很多。我觉得还是读两次数据库在内存中计算吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1142 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 18:45 · PVG 02:45 · LAX 10:45 · JFK 13:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.