› 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 · 5099 views
    This topic created in 2631 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   ·   Privacy   ·   Solana   ·   911 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 20:49 · PVG 04:49 · LAX 13:49 · JFK 16:49
    ♥ Do have faith in what you're doing.