1

SQLクエリを介してユーザーの電子メールアドレスの大規模なデータベースでTLDを検出する必要があります。

メールアドレスは、フィールドとして1行に保存されます。次のように構成されています。

id     username     email

1      steve        steve@place.com
2      bill         bill@fake.asdf

TLDが「com」、「org」、「net」と一致しないかどうかを検出し、特定のTLDと一致しない値のみをデータベースから返すようにしています。明らかにこの場合、ID2のユーザーのみがフェッチされます。

これはSQLクエリで発生する必要があります。

4

3 に答える 3

2

REGEXP を使用し、

SELECT fields FROM table WHERE email REGEXP '^(net|org|com)$';

式を編集して、目的の結果を得ることができます。:)

于 2011-06-08T22:14:43.297 に答える
2

おそらく、特定のシステムでこれを行うためのより良い方法がありますが、これは DB 固有の関数を使用していません。さらに、ある時点でテーブルから除外リストをハードコーディングする代わりに読み取ることにした場合、これはすぐに変更できるようになります。

select users.*
from users
left join (
  select 'com' as tld
  union all select 'net'
  union all select 'org'
) tlds on users.email like '%.' || tld
where tlds.tld is null
于 2011-06-08T22:22:47.480 に答える
0
SELECT id
FROM users
WHERE SUBSTRING_INDEX( email, '.', -1 )
        NOT IN ('com', 'net', 'org') 

これをどのように実行しても (LIKE代わりに使用するのは簡単です)、高速にはなりません。電子メールの TLD (テーブルに数千または数百万の行がある) を検索するクエリが必要で、クエリを高速にする場合はtld、テーブルにフィールドを追加し、そのフィールドにインデックスを追加できます。

于 2011-06-08T23:04:55.763 に答える