在具有不同格式电话号码的两个或多个电话字段列的 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/