データベースから特定のデータを含むエントリを選択する方法はありますか?データベースにたくさんのメールアドレスがありますが、1つのドメインからのみ選択したいと思います。それも可能ですか?
4 に答える
もちろん、LIKE演算子を使用してください。
SELECT email FROM Persons
WHERE email LIKE '%gmail.com'
ワイルドカード検索を行うことはお勧めできません。
これは、mysql がインデックスを使用して選択クエリを固定できないためです。
特に、データベースに大量の電子メールがあると述べています。
または、追加のフィールドを使用してhostname
、ホスト名のみを保存することもできます。
そしてもちろん、それへのインデックスを構築します。
でメールを検索する必要がある場合はgmail.com
、
単純な文字列比較を行うことができます
SELECT email FROM Persons
WHERE hostname='gmail.com';
単純な文字列比較は mysql インデックスに適しているため、クエリが最適化されます。
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);
使用する必要がありますLIKE MYSQL CLAUSE
SELECT * FROM email_table WHERE email LIKE "%gmail.com"