Mysql INSTR 帮助仅搜索匹配更多文本的 1 行

Mysql INSTR help search only 1 row that match more text

我有一个 table 带有字段代码的房间

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

可以

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

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

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

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

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)
)