0

データベースから特定のデータを含むエントリを選択する方法はありますか?データベースにたくさんのメールアドレスがありますが、1つのドメインからのみ選択したいと思います。それも可能ですか?

4

4 に答える 4

6

もちろん、LIKE演算子を使用してください。

SELECT email FROM Persons
WHERE email LIKE '%gmail.com'
于 2013-01-25T08:16:54.630 に答える
2

ワイルドカード検索を行うことはお勧めできません。
これは、mysql がインデックスを使用して選択クエリを固定できないためです。
特に、データベースに大量の電子メールがあると述べています。

または、追加のフィールドを使用してhostname、ホスト名のみを保存することもできます。
そしてもちろん、それへのインデックスを構築します。

でメールを検索する必要がある場合はgmail.com
単純な文字列比較を行うことができます

SELECT email FROM Persons
WHERE hostname='gmail.com';

単純な文字列比較は mysql インデックスに適しているため、クエリが最適化されます。

于 2013-01-25T08:24:53.297 に答える
1

ajreal が指摘しているように、通常、MySQL はインデックスを使用して LIKE クエリを最適化することはできません。ただし、末尾のワイルドカードのみ%がパターンの最後にある特定のケース (実質的には「開始」クエリ) では、オプティマイザーはインデックスを使用してクエリを高速化することができます。

したがって、メール アドレスを逆順に格納するインデックス付きの列を追加すると、効率的にクエリを実行できます。

SELECT email FROM xyz WHERE reverse_email LIKE 'moc.liamg@%`

すべての gmail アドレス、またはLIKE 'ku.%英国ドメインのすべてのアドレスなどを検索します。トリガーを使用して、データベースにこの列を最新の状態に保つことができるため、既存の更新コードには影響しません。

CREATE TRIGGER emailinsert BEFORE INSERT ON xyz
FOR EACH ROW SET NEW.reverse_email = REVERSE(NEW.email);

CREATE TRIGGER emailupdate BEFORE UPDATE ON xyz
FOR EACH ROW SET NEW.reverse_email = REVERSE(NEW.email);
于 2013-01-25T09:05:40.720 に答える
0

使用する必要がありますLIKE MYSQL CLAUSE

SELECT * FROM email_table WHERE email LIKE "%gmail.com"
于 2013-01-25T08:16:06.187 に答える