我有一張表,它存儲電子郵件在3個不同列 名稱主機和域。 我想加入這些列來創建一列,以便我可以通過完整的電子郵件地址進行搜索。 就像搜索多列,就好像它是一列中的mysql
SELECT * FROM email_eml WHERE (all the columns combined) = $email;
電子郵件存儲沒有一個。並在任何一列@我希望最終結果包含這些。
我有一張表,它存儲電子郵件在3個不同列 名稱主機和域。 我想加入這些列來創建一列,以便我可以通過完整的電子郵件地址進行搜索。 就像搜索多列,就好像它是一列中的mysql
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注入風險。如果不是,則使用準備好的語句。SELECT * FROM email_eml WHERE name+'@'+host+'.'+domain = '$email';
可以使用CONCAT()
function。
那麼你的要求是:
SELECT * FROM email_eml WHERE CONCAT(name,'@',host,'.',domain) = $email
爲了讓MySQL使用索引(?你做了這些指標列,沒有你),我寧願分裂您輸入電子郵件地址,然後分別搜索每個字段,即:
SELECT CONCAT(name, '@', host, '.', domain) AS email
WHERE name = 'user' AND host = 'mysite' AND domain = 'com'
您是否確實需要將三個電子郵件地址組件分開存放在數據庫中?否則,只需存儲完整的電子郵件。
需要等5分鐘,直到我可以接受一個答案,但我需要去吃。我很可能會在今天晚上接受它;/ – Xitcod13
沒問題,請花些時間看看是否有其他好的建議。@ YaK的答案可能更適合您的需求。 –