在子字符串上使用 DISTINCT() 对 MySQL 中电子邮件数据库中的域进行分组
Using DISTINCT() on a sub-string to group domains on an email DB in MySQL
我有一个很大的 MySQL 电子邮件地址数据库。我希望能够按域 group/filter 他们。有没有办法使用 DISTINCT() 来做到这一点?
目前我正在通过 PHP 获取所有内容,在 @ 符号处迭代和拆分并为每个域创建一个数组。这适用于较小的数据集,但在长 运行 中不可行。有什么建议么?
我正在设想类似的事情:
SELECT DISTINCT([part-of-email-after-the-@-sign].EMAIL) FROM CONTACTS
谢谢
使用 INSTR 查找“@”:
select DISTINCT substr(EMAIL, instr(EMAIL, '@') + 1) from CONTACTS;
我的第一个想法是子字符串,似乎有几种方法可以做到这一点,包括支持链接
选项 1
可能特定于 SQL 服务器,现在确认
SELECT DISTINCT(RIGHT(Email, LEN(Email) - CHARINDEX('@', Email))) FROM CONTACTS
http://blog.sqlauthority.com/2011/06/18/sql-server-selecting-domain-from-email-address/
选项 2
见How to select domain name from email address
我假设额外的 SUBSTRING_INDEX 是删除 .com 或 ect
select (SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1),'.',1))
SELECT DISTINCT(SUBSTR(email, INSTR(email, '@') + 1)) FROM CONTACTS
选项 3
How to return distinct domain names from email address values in MySQL?
使用 GROUP BY 而不是 DISTINCT,可能的性能因素值得测试
SELECT SUBSTRING_INDEX(user_email,'@',-1) as domain_name FROM user_email group by domain_name
您可以使用SUBSTRING_INDEX
找到@
之后的部分,然后在其上使用DISTINCT
。
SELECT DISTINCT SUBSTRING_INDEX(user_email, '@', -1) AS domain
FROM Contacts
我有一个很大的 MySQL 电子邮件地址数据库。我希望能够按域 group/filter 他们。有没有办法使用 DISTINCT() 来做到这一点? 目前我正在通过 PHP 获取所有内容,在 @ 符号处迭代和拆分并为每个域创建一个数组。这适用于较小的数据集,但在长 运行 中不可行。有什么建议么?
我正在设想类似的事情:
SELECT DISTINCT([part-of-email-after-the-@-sign].EMAIL) FROM CONTACTS
谢谢
使用 INSTR 查找“@”:
select DISTINCT substr(EMAIL, instr(EMAIL, '@') + 1) from CONTACTS;
我的第一个想法是子字符串,似乎有几种方法可以做到这一点,包括支持链接
选项 1
可能特定于 SQL 服务器,现在确认
SELECT DISTINCT(RIGHT(Email, LEN(Email) - CHARINDEX('@', Email))) FROM CONTACTS
http://blog.sqlauthority.com/2011/06/18/sql-server-selecting-domain-from-email-address/
选项 2
见How to select domain name from email address
我假设额外的 SUBSTRING_INDEX 是删除 .com 或 ect
select (SUBSTRING_INDEX(SUBSTR(email, INSTR(email, '@') + 1),'.',1))
SELECT DISTINCT(SUBSTR(email, INSTR(email, '@') + 1)) FROM CONTACTS
选项 3
How to return distinct domain names from email address values in MySQL?
使用 GROUP BY 而不是 DISTINCT,可能的性能因素值得测试
SELECT SUBSTRING_INDEX(user_email,'@',-1) as domain_name FROM user_email group by domain_name
您可以使用SUBSTRING_INDEX
找到@
之后的部分,然后在其上使用DISTINCT
。
SELECT DISTINCT SUBSTRING_INDEX(user_email, '@', -1) AS domain
FROM Contacts