Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php SQL查询字符串开头最接近的匹配项_Php_Mysql_Sql - Fatal编程技术网

Php SQL查询字符串开头最接近的匹配项

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

我目前正在使用Mysql和PHP

查找一个查询,该查询将获取一个数字并查找一组数字开头的匹配项,例如,我的数字
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,而不仅仅是返回托福作为密室匹配,它还返回牛津、罗姆福德和克劳福德。谢谢你回答这个问题。我认为这是一个相同的问题:可能是重复的