1

我有一个表,将电子邮件存储在 3 个不同的列名称主机和域中。我想加入这些列以创建一个列,以便我可以通过完整的电子邮件地址进行搜索。就像

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'

您真的需要在数据库中将三个电子邮件地址组件分开吗?否则,只需存储完整的电子邮件。

于 2012-06-15T10:13:50.027 回答
0
SELECT * FROM email_eml WHERE name+'@'+host+'.'+domain = '$email';
于 2012-06-15T10:04:47.877 回答
0

您可以使用该CONCAT() 功能
那么您的请求将是:

SELECT * FROM email_eml WHERE CONCAT(name,'@',host,'.',domain) = $email
于 2012-06-15T10:06:01.693 回答