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)
)
我有一个 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)
)