2016-05-12 1 views
0

У меня есть большой БД MySQL для адресов электронной почты. Я хотел бы иметь возможность группировать/фильтровать их по домену. Есть ли способ сделать это с помощью DISTINCT()? На данный момент я собираю все через PHP, итерацию и разбивку на @ -sign и создание массива для каждого домена. Это отлично подходит для небольших наборов данных, но в долгосрочной перспективе не является жизнеспособным. Какие-либо предложения?Использование DISTINCT() для подстроки для группировки доменов в почтовом ящике в MySQL

я что-то вдоль этих линий, предусмотрев:

SELECT DISTINCT([[email protected]].EMAIL) FROM CONTACTS 

Благодаря

+0

http://stackoverflow.com/questions/11805166/how-to-return-distinct-domain-names-from-email-address-values-in-mysql –

ответ

2

Вы можете использовать SUBSTRING_INDEX найти после @, а затем используйте DISTINCT.

SELECT DISTINCT SUBSTRING_INDEX(user_email, '@', -1) AS domain 
FROM Contacts 
1

использует Instr найти '@':

select DISTINCT substr(EMAIL, instr(EMAIL, '@') + 1) from CONTACTS; 
1

Моя первая мысль подстроки, кажется, несколько способов в том числе вспомогательные ссылки

Вариант 1

Может быть специфическими для SQL Server, подтвердив в настоящее время

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 
+0

Я был бы очень удивлен, если есть какая-либо разницу между «DISTINCT» и «GROUP BY», когда вы группируете все столбцы в «SELECT». – Barmar