【发布时间】:2015-09-22 01:34:51
【问题描述】:
我有一个数据库表,其中包含电话号码前缀以及每个电话号码每分钟的费用。电话前缀的长度可以变化很大,从一位数到很多位(5-6 或更多)。
一些前缀会重叠,例如通常有一个默认的国家/地区每分钟费率,因此更具体的移动费率必须覆盖不太具体的费率。
目前我正在考虑这样做的方式是做一个while循环检查前缀表中的数字,每个循环删除最后一个数字。这是非常准确的,但是它确实会进行很多查询,因为一个数字可能是 12 位长,而相关的前缀大约是 4 位。
有没有更好的办法?
更新:这是表格的截图,第一列是描述,第二列是通话费率,第三列是电话前缀。
挑战是将像 61412345678 这样的真实电话号码与最适用的前缀匹配,而不需要像我当前的方法那样多的查询。
【问题讨论】:
-
你能再澄清一点吗,最好是截图或带有数据的表格结构?
-
是的,确实得到了表格的屏幕截图。
-
为什么不取一个子字符串并将其与带有前缀的列匹配...所以说您确实有 12 位数字,只需取其中的 4 位并匹配...获取对应的 ID 或其他列您需要与该行相关的数据以从那里继续处理...不知道为什么要从末尾循环遍历数字...
-
好问题,我想说。你可以这样想: 1. 在一个while循环中,首先找到strlen(prefix)。例如,电话号码是 61412345678,第一个前缀是 61,所以我们会得到 strlen(61)=2 并将这个前缀与电话号码进行比较,如果匹配,我们会将 strlen 和前缀存储在数组 2 中。然后遍历下一个前缀并得到strlen(61870) =5,并将这个前缀与电话号码进行比较,如果匹配,我们会将strlen和前缀存储在数组3中。最后,从数组中找到max(strlen)。解决方案看起来效率不高,但您可以进一步改进!
-
BK435 这是因为前缀长度可以变化,并且可以重叠,所以它不能使用第一个匹配的前缀,它必须使用最具体的前缀。