我有一个电话记录表
phones(id, number);
It may have values as:-
1, 9801234567
2, 980 1234568
3, 9779801234569
4, 9801234570
5, 977 980 1234 571
如果有人搜索980 1234567(带空格),我可以在运行查询之前删除空格以获得结果。
但我的问题是当有人搜索9779801234571并且条件是没有常规格式的数字时,它必须返回最后一条记录,即977 980 1234 571.任何想法如何有效地做到这一点?
答案 0 :(得分:2)
这是一种方法:
where replace(phonenumber, ' ', '') = replace($phonenumber, ' ', '')
有效地做这件事是另一回事。为此,您必须以规范格式在数据库中格式化您的电话号码 - 例如删除update
语句中的所有空格。然后以相同的格式输入您要搜索的号码。然后,查询可以使用列上的索引。
答案 1 :(得分:2)
最好在将数据写入数据库之前从空白区域清除电话号码。您可以使用此功能轻松完成此操作:
$string = preg_replace('/\s+/', '', $string);
也许您还需要删除其他字符,例如-
或/
。
然后你可以使用一个简单的WHERE
条件,没有花里胡哨。这也将显着提高SELECT
语句的效果,因为您无需对数据进行转换即可找到正确的行。
这假设你当然是自己填充数据库。如果情况并非如此,请忽略此建议。