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 · Jul 26, 2019 · 4924 views
    This topic created in 2529 days ago, the information mentioned may be changed or developed.

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

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

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

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

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

    1 replies    2019-07-26 20:22:57 +08:00
    ywcjxf1515
        1
    ywcjxf1515  
       Jul 26, 2019   ❤️ 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,会容易很多。我觉得还是读两次数据库在内存中计算吧。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1295 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 16:53 · PVG 00:53 · LAX 09:53 · JFK 12:53
    ♥ Do have faith in what you're doing.