1

ホストとドメインの名前の3つの異なる列に電子メールを格納するテーブルがあります。これらの列を結合して1つの列を作成し、完全な電子メールアドレスで検索できるようにします。と同じように

SELECT * FROM email_eml WHERE (all the columns combined) = $email;

メールは。なしで保存されます。どちらの列にも@がなく、最終結果にそれらが含まれるようにします。

4

4 に答える 4

4
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

でも:

  1. 使用しないでください*。パフォーマンスにはひどいです。
  2. $email変数がエスケープされ、SQLインジェクションのリスクがないことを願っています。そうでない場合は、プリペアドステートメントを使用します。
于 2012-06-15T10:04:23.617 に答える
2

MySQL でインデックスを使用するには (これらの列にインデックスを作成しましたよね?)、入力した電子メール アドレスを分割してから、各フィールドを個別に検索します。つまり、次のようになります。

SELECT CONCAT(name, '@', host, '.', domain) AS email
WHERE name = 'user' AND host = 'mysite' AND domain = 'com'

データベース内で 3 つの電子メール アドレス コンポーネントを分離しておく必要がありますか? それ以外の場合は、完全な電子メールを保存してください。

于 2012-06-15T10:13:50.027 に答える
0

CONCAT() 関数を使用できます。
その後、あなたのリクエストは次のようになります:

SELECT * FROM email_eml WHERE CONCAT(name,'@',host,'.',domain) = $email
于 2012-06-15T10:06:01.693 に答える
0
SELECT * FROM email_eml WHERE name+'@'+host+'.'+domain = '$email';
于 2012-06-15T10:04:47.877 に答える