【问题标题】:Mysql INSTR help search only 1 row that match more textMysql INSTR 帮助仅搜索匹配更多文本的 1 行
【发布时间】:2020-02-03 08:34:35
【问题描述】:

我有一个带域代码的桌子

code
BED 6 
BED 6 DEM

我有一个要搜索的文本,例如“... BED 6 DEM ...”

如果我这样做SELECT * FROM room WHERE INSTR('... BED 6 DEM ...',code) >0

我得到了这两行:

code
BED 6 
BED 6 DEM

但我只想得到 1 个:BED 6 DEM

有时我只需要SELECT * FROM room WHERE INSTR('... BED 6 ...',code) >0

只得到 1 行

code
BED 6

没问题

有什么建议可以始终获得最佳匹配行吗?

【问题讨论】:

    标签: mysql string sql-order-by where-clause sql-limit


    【解决方案1】:

    您可以按照匹配字符串的长度降序对结果进行排序,只得到第一个结果:

    SELECT *
    FROM room r 
    WHERE INSTR('... BED 6 DEM ...', code) > 0
    ORDER BY CHAR_LENGTH(code) DESC
    LIMIT 1
    

    另一种选择是使用带有相关子查询的NOT EXISTS 条件来匹配包含搜索字符串的最长字符串,例如:

    SELECT * 
    FROM room r 
    WHERE INSTR('... BED 6 DEM ...', code) > 0
    AND NOT EXISTS (
        SELECT 1
        FROM room r1
        WHERE 
            INSTR('... BED 6 DEM ...', r1.code) > 0
            AND CHAR_LENGTH(r1.code) > CHAR_LENGTH(r.code)
    )
    

    【讨论】:

    • 我喜欢第一个@GMB 是天才!谢谢! :-)
    猜你喜欢
    • 1970-01-01
    • 2010-12-08
    • 2012-04-01
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2018-09-07
    • 1970-01-01
    • 2015-06-13
    相关资源
    最近更新 更多