php - 通过 PHP 从 MySQL 搜索多种电话号码格式

标签 php mysql search multiple-columns phone-number

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

我有一个包含 2 列的数据库表 - phone 和 mobile。

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

+(91) 950-232-9020  
+91 950-232-9020  
+91 9502329020  
09502329020

如果我想搜索电话号码“9502329020”,请从我的 PHP 脚本
我希望它返回 4 行。

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

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 查询中使用正则表达式。

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

最佳答案

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

您必须找到一个中间地带,它会指示您如何保存数据,但会加快搜索速度。由于您已经有一列(用于存储和显示电话号码),我建议添加另一列 'formattedphonenumbers' 作为 varchar。它应该存储相同的电话号码,但格式正确,可以用作索引。在此列中删除所有不是数字的字符,然后将其反转。

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

关于php - 通过 PHP 从 MySQL 搜索多种电话号码格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32390972/

相关文章:

php - Laravel 5 `belongsToMany` 与 `wherePivot` Eloquent 查询无法正常工作

尝试创建表时,Mysql 出现语法错误。我找不到这个错误在哪里

java - 搜索ArrayList的关键字并返回位置

php - 使用 ajax 重新加载和 WordPress 插件

PHP MYSQL 无法连接 (HY000/2002)

php - CakePHP 递归实现漂亮的路由 - 类别、主题、部分、小节等

mysql - 使用 SQL 条目进行数学运算

php - 根据 UID 从 Gmail 获取电子邮件数据

c++ - 替代大型数据集的 vector ? C++

跨多行搜索并将它们复制到剪贴板