简而言之,我想将字典条目与一行文本匹配,但它不必匹配整行,只是开头.所以它实际上是一种反向LIKE%…%
例如,
SELECT * FROM `dictionary` WHERE
(`simplified` = '铅笔的历史非常悠久,它起源于2000多年'
OR `simplified` = '铅笔的历史非常悠久,它起源于2000多'
OR `simplified` = '铅笔的历史非常悠久,它起源于2000'
OR `simplified` = '铅笔的历史非常悠久,它起源于200'
OR `simplified` = '铅笔的历史非常悠久,它起源于20'
OR `simplified` = '铅笔的历史非常悠久,它起源于2'
OR `simplified` = '铅笔的历史非常悠久,它起源于'
OR `simplified` = '铅笔的历史非常悠久,它起源'
OR `simplified` = '铅笔的历史非常悠久,它起'
OR `simplified` = '铅笔的历史非常悠久,它'
OR `simplified` = '铅笔的历史非常悠久,'
OR `simplified` = '铅笔的历史非常悠久'
OR `simplified` = '铅笔的历史非常悠'
OR `simplified` = '铅笔的历史非常'
OR `simplified` = '铅笔的历史非'
OR `simplified` = '铅笔的历史'
OR `simplified` = '铅笔的历'
OR `simplified` = '铅笔的'
OR `simplified` = '铅笔'
OR `simplified` = '铅')
ORDER BY CHAR_LENGTH(`simplified`) DESC;
这有效并且做我需要的但是我知道它非常低效.这样做还有其他办法吗?非常感谢!!
示例结果:
97576 铅笔
97484 铅
97566 铅
解决方法:
怎么样
WHERE `simplified` = SUBSTRING(
'铅笔的历史非常悠久,它起源于2000多年',
0, CHAR_LENGTH(`simplified`))
?可能不可索引,但至少查询很短.
标签:mysql
来源: https://codeday.me/bug/20190612/1225971.html