我有一个名为消息的表,其中有一个字段名称手机号码。 数字采用以下格式:
12345678 和 +9112345678 ..所以它们都是相同的..唯一的区别是在一个数字中缺少国家/地区代码。
所以我在数据库中查询
select the **distinct** numbers from messages tables..
现在它将这两个数字视为不同..但我想要的是将这两个数字视为一个。
我该如何执行此操作?并且在我的数据库中有多个具有不同国家/地区代码的号码。有些有国家/地区代码,有些没有,但我想将两者合而为一。一个有国家代码,另一个没有国家代码。怎么办?
最佳答案
如果这是一个应该“实时”完成的查询,那么您的表内容将不会很理想(阅读:糟糕的性能)
也就是说,如果您知道所有国家/地区代码及其本地前缀(例如,瑞典的本地号码类似于 092066666
,同时带有国家/地区前缀,则可以得出正确结果的近似值0
被删除为 +4692066666
。
CREATE TABLE country_codes (
id INT,
code VARCHAR(5),
local_prefix VARCHAR(5)
);
INSERT INTO country_codes VALUES
(1, '+46', '0'),
(2, '+91', '');
...然后你可以执行类似的查询;
SELECT COUNT(DISTINCT
CASE WHEN SUBSTR(number,1,1) = '+'
THEN REPLACE(number,
(SELECT code
FROM country_codes
WHERE SUBSTR(number, 1, LENGTH(code)) = code),
(SELECT local_prefix
FROM country_codes
WHERE SUBSTR(number, 1, LENGTH(code)) = code))
ELSE number
END) "distinct numbers"
FROM numbers;
关于php - 选择不同的数字 sql Cakephp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17484940/