大海捞针sql

searching needle when we know the haystack in sql

我有一个包含许多国家代码及其相应国家名称的数据库 例如:

mauritius   230
canada      1
testcountry 1234

每个国家可能有 1 到 5 个起始号码。用户将输入任何 phone 数字,例如 23012345678,输出应为 mauritius.

如何在数据库中执行这样的 sql 查找?我在想我可以制作输入数据的 5 个子字符串:

2
23
230
2301
23012

并找到匹配项,但这效率不高。知道如何进行吗? (php)

您可以通过在列后使用通配符将您的代码列与 phone 数字匹配来使用类似查询,这样它将只匹配起始字符

select *
from countries
where '23012345678' like concat(`code`,'%') > 0

DEMO

根据评论编辑

您可以在您的代码列上使用 length() 函数,并为最匹配的国家/地区代码排序长度最长的结果

select *
from countries
where '23012345678' like concat(`code`,'%') > 0
order by length(`code`) desc 
limit 1

DEMO 2