搜索多个列,就好像它是mysql中的一列一样

时间:2012-06-15 10:03:00

标签: php mysql

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

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

电子邮件存储时没有。并且在两列中都没有@我希望最终结果包含那些。

4 个答案:

答案 0 :(得分:4)

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

请参阅文档(假设您正在使用MySQL)来获取CONCAT函数:http://dev.mysql.com/doc/refman/5.5/en/string-functions.html#function_concat

然而:

  1. 请勿使用*。表演太糟糕了。
  2. 我确定希望您的$email变量被转义并且没有SQL注入风险。如果不是,请使用准备好的陈述。

答案 1 :(得分:2)

为了让MySQL使用索引(你确实为这些列编制索引,不是吗?),我宁愿拆分你的输入电子邮件地址,然后分别搜索每个字段,即:

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

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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