ホストとドメインの名前の3つの異なる列に電子メールを格納するテーブルがあります。これらの列を結合して1つの列を作成し、完全な電子メールアドレスで検索できるようにします。と同じように
SELECT * FROM email_eml WHERE (all the columns combined) = $email;
メールは。なしで保存されます。どちらの列にも@がなく、最終結果にそれらが含まれるようにします。
SELECT * FROM email_eml WHERE CONCAT( name, '@', host, '.', domain ) = $email
CONCAT関数については(MySQLを使用していると仮定して)ドキュメントを参照してください:http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_concat
でも:
*
。パフォーマンスにはひどいです。$email
変数がエスケープされ、SQLインジェクションのリスクがないことを願っています。そうでない場合は、プリペアドステートメントを使用します。MySQL でインデックスを使用するには (これらの列にインデックスを作成しましたよね?)、入力した電子メール アドレスを分割してから、各フィールドを個別に検索します。つまり、次のようになります。
SELECT CONCAT(name, '@', host, '.', domain) AS email
WHERE name = 'user' AND host = 'mysite' AND domain = 'com'
データベース内で 3 つの電子メール アドレス コンポーネントを分離しておく必要がありますか? それ以外の場合は、完全な電子メールを保存してください。
CONCAT()
関数を使用できます。
その後、あなたのリクエストは次のようになります:
SELECT * FROM email_eml WHERE CONCAT(name,'@',host,'.',domain) = $email
SELECT * FROM email_eml WHERE name+'@'+host+'.'+domain = '$email';