简而言之,我希望将字典条目与一行文本匹配,但它不必匹配整行,只是开头。所以它实际上是一种反向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 铅
答案 0 :(得分:6)
怎么样
WHERE `simplified` = SUBSTRING(
'铅笔的历史非常悠久,它起源于2000多年',
0, CHAR_LENGTH(`simplified`))
?可能不可索引,但至少查询很短。 :)
你可以通过添加
来优化它AND `simplified` LIKE '铅%'
拒绝所有至少不以正确字符开头的行。
答案 1 :(得分:1)
尝试这样:
SELECT * FROM `dictionary` WHERE simplified like '铅%'
答案 2 :(得分:0)
您可以尝试REGEXP
将字段与正则表达式匹配。