Php SQL查询字符串开头最接近的匹配项
我目前正在使用Mysql和PHP 查找一个查询,该查询将获取一个数字并查找一组数字开头的匹配项,例如,我的数字Php SQL查询字符串开头最接近的匹配项,php,mysql,sql,Php,Mysql,Sql,我目前正在使用Mysql和PHP 查找一个查询,该查询将获取一个数字并查找一组数字开头的匹配项,例如,我的数字019235678910、026725678910、026825678910,我的表如下所示 Table - Destintation Name Number Watford 01923 Oxford 026 Romford 026 Crawford 0267 Topford 02672 因此,当我通过019235678910时,结果将是Watford,026725
019235678910、026725678910、026825678910
,我的表如下所示
Table - Destintation
Name Number
Watford 01923
Oxford 026
Romford 026
Crawford 0267
Topford 02672
因此,当我通过019235678910
时,结果将是Watford
,026725678910
将是Topford
,026825678910
将是Oxford
和Romford
我也不确定MYSQL是否可以直接实现这一点,或者是否需要与PHP结合使用
SELECT Name, Number
FROM Destintation
WHERE LEFT('026725678910', LENGTH(Number)) = Number
或许
WHERE '026725678910' LIKE CONCAT(Number, '%')
以下是获取所有这些信息的一种方法:
select d.*
from Destination d join
(select length(Number) as maxlen, number
from destination d
where YOURVALUE like concat(Number, '%')
order by maxlen desc
limit 1
) dsum
on d.Number = dsum.Number
因为您正在寻找初始序列,所以数字上只有一个最大匹配(因此限制1
有效)
顺便说一下,名为
number
的字段显然是一个字符字段。就我个人而言,我认为将字符域称为“数字”是一种不好的做法,这叫做认知失调。谢谢你的回答,这是有效的,但并不完全是我想要的数字026725678910,而不仅仅是返回托福作为密室匹配,它还返回牛津、罗姆福德和克劳福德。谢谢你回答这个问题。我认为这是一个相同的问题:可能是重复的