2016-05-12 6 views
0

私は電子メールアドレスの大きなMySQL DBを持っています。私はそれらをドメインごとにグループ化/フィルタリングできるようにしたいと思います。 DISTINCT()を使用してそれを行う方法はありますか? 現時点では、PHP経由ですべてを取得していますが、@ -signで繰り返し、分割し、各ドメインの配列を作成します。これは小さなデータセットではうまく動作しますが、長期的には実行可能ではありません。助言がありますか?サブ文字列のDISTINCT()を使用して、MySQLの電子メールDB上のドメインをグループ化します

私はそれらの線に沿って何かを想定しています:

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

のテストがなく、DISTINCT、可能なパフォーマンス要因BY GROUPの使用は非常に価値がします@の後ろに部分を置き、それに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 How to select domain name from email address

に見られるようにオプション2

SELECT DISTINCT(RIGHT(Email, LEN(Email) - CHARINDEX('@', Email))) FROM CONTACTS 

http://blog.sqlauthority.com/2011/06/18/sql-server-selecting-domain-from-email-address/

を確認するSQL Serverに多分特定

、私は余分なSUBSTRING_INDEXを削除するためにあると仮定.com or 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?

はあなたが見つけることSUBSTRING_INDEXを使用することができます

SELECT SUBSTRING_INDEX(user_email,'@',-1) as domain_name FROM user_email group by domain_name 
+0

いずれかがあります場合、私は非常に驚くだろう'DISTINCT'と' GROUP BY'との間のパフォーマンスの違いは、 'SELECT'のすべての列でグループ化しているときです。 – Barmar

関連する問題