2012-06-15 47 views
1

我有一張表,它存儲電子郵件在3個不同列 名稱主機和域。 我想加入這些列來創建一列,以便我可以通過完整的電子郵件地址進行搜索。 就像搜索多列,就好像它是一列中的mysql

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

電子郵件存儲沒有一個。並在任何一列@我希望最終結果包含這些。

回答

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注入風險。如果不是,則使用準備好的語句。
+0

需要等5分鐘,直到我可以接受一個答案,但我需要去吃。我很可能會在今天晚上接受它;/ – Xitcod13

+0

沒問題,請花些時間看看是否有其他好的建議。@ YaK的答案可能更適合您的需求。 –

0
SELECT * FROM email_eml WHERE name+'@'+host+'.'+domain = '$email'; 
0

可以使用CONCAT()function
那麼你的要求是:

SELECT * FROM email_eml WHERE CONCAT(name,'@',host,'.',domain) = $email 
2

爲了讓MySQL使用索引(?你做了這些指標列,沒有你),我寧願分裂您輸入電子郵件地址,然後分別搜索每個字段,即:

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

您是否確實需要將三個電子郵件地址組件分開存放在數據庫中?否則,只需存儲完整的電子郵件。