MySQL查询以获取国家/地区的代码

时间:2014-06-03 10:59:43

标签: mysql sql

我正在开发一个应用程序,在其中的一部分我得到一个字符串作为电话号码,我必须返回该号码的电话提供商,在数据库中我有这个结构的表前缀:

id , name, code

其中的一些数据如下:

(23242, 'UK-Mobile-T Mobile', '447984'),
(23243, 'UK-Mobile-T Mobile', '447985'),
(23244, 'UK-Mobile-T Mobile', '447986'),
(23245, 'UK-Mobile-T Mobile', '447987'),
(23246, 'UK-Mobile-Vodafone', '447407'),
(23247, 'UK-Mobile-Vodafone', '447423'),

name是提供者,代码是属于该提供者的前缀 我输入的是一个电话号码,就像447243xxxxx

一样

问题是这样的: 当给出上述输入时,我应该如何创建一个返回UK-Mobile-Vodafone的查询?

请记住,此代码的长度对于每个国家/地区都不相同

2 个答案:

答案 0 :(得分:1)

这可能对您有用:

select t.*
from table t
where '447243xxxxx' like concat(t.code, '%');

除其他外,这假设只有一个前缀匹配每个数字。否则你需要在他们中间做出选择。

如果您需要在它们中进行选择,通常您需要最长的匹配项:

select t.*
from table t
where '447243xxxxx' like concat(t.code, '%')
order by length(t.code) desc
limit 1;

然后,如果您希望能够使用索引,则不希望在concat()上使用code。相反,提取前n个字符。如果所有长度(6)与示例中的相同,则很容易:

select t.*
from table t
where left('447243xxxxx', 6) = t.code;

答案 1 :(得分:0)

只需将LIKE-operator与GROUP BY一起使用:

SELECT NAME FROM TBL_TABLENAME WHERE CODE LIKE '447243%' group by NAME;