首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从MySQL中通过PHP搜索多个电话号码格式

从MySQL中通过PHP搜索多个电话号码格式
EN

Stack Overflow用户
提问于 2015-09-04 05:53:50
回答 3查看 1.6K关注 0票数 1

在MySQL数据库表中搜索具有不同格式电话号码的两个或多个电话字段列中的电话号码

我有一个带有2 columns - phone and mobile.的数据库表

两列都有不同格式的电话号码,如下所示:

代码语言:javascript
复制
+(91) 950-232-9020  
+91 950-232-9020  
+91 9502329020  
09502329020

如果我想搜索电话号码'9502329020',

我要它返回4行。

到目前为止,我已经在每个数字之后找到了使用1解决方案%,如下所示:

代码语言:javascript
复制
Select * from table 
where phone like '%9%5%0%2%3%2%9%0%2%0' or 
mobile like '%9%5%0%2%3%2%9%0%2%0';

但是,如果我必须搜索数百万行,我需要一个优化的解决方案。

有人能帮我找到一个优化的解决方案吗,有点像在MYSQL查询中使用regex。

注意:在数据库中保存时,电话号码以用户友好的格式保存。

EN

回答 3

Stack Overflow用户

发布于 2015-09-04 06:20:29

我认为你使用错误的方式(因为你除了数百万行)。无论你做什么,你的瓶颈将是缺乏索引,否则你将无法使用索引,如果也可用。您应该正确地设计您的专栏,我还发现您的要求是:“在数据库中保存电话号码时,要以用户友好的格式保存。”荒谬可笑。每一枚硬币都有两面,你不能只考虑一面而忽略另一面。在您的示例中,保存和显示数据更容易,但搜索相同的数据几乎是不可能的。

您将不得不找到一个中间地带,这将指示您如何保存数据,但将使搜索更快。由于您已经有了一个列(用于存储和显示电话号码),我建议添加另一列“formattedphonenumbers”作为varchar。它应该存储相同的电话号码,但以适当的格式,可以用作索引。在本列中,删除所有不是数字的字符,然后将其反转。

如果电话号码是+(91) 950-232-9020,那么在格式化的列中,它应该被存储为020923205919(反向),现在您将能够正确地使用索引。在搜索(如950-232-9020或+(91) 950-232-9020或0950-232-9020 )时,做同样的事情--条条-所有非数字字符-将其反转并搜索为“020923205919%”格式的数字-如果没有给出国家代码,那么它也可以搜索。

票数 0
EN

Stack Overflow用户

发布于 2015-09-04 06:26:50

正则表达式是您的朋友:

代码语言:javascript
复制
$number="9502329020";

$regexp = "(0|.* )?".substr($number,0,3)."-?".substr($number,3,3)."-?".substr($number,6,4);

$subquery = "SELECT * FROM table WHERE phone REGEXP '$regexp' or mobile REGEXP '$regexp'";
票数 0
EN

Stack Overflow用户

发布于 2015-09-04 07:08:32

@Criesto :刚刚实施:

创建**new table 'filtered_phonenumbers'**

有两列“recordid”和“phone_number

一张唱片有多个电话号码,

在去掉所有特殊字符(如space,(,),+,- )后保存

例如:我有记录

代码语言:javascript
复制
recordid = '1' and   
phone = +(91) 950-232-9020  
mobile = 9502329020 

所以做了一个新的表“filtered_phonenumbers”

将记录以过滤形式保存在手机和移动设备上,如下所示:

代码语言:javascript
复制
recordid    |   phone_number
1           |   919502329020
1           |   9502329020

每当要搜索电话号码时,都可以在这个新表中搜索,然后记录就可以由记录器操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32390972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档