我有一个表格,将电子邮件存储在 3 个不同的列中命名主机和域。我想加入这些列以创建一个列,以便我可以通过完整的电子邮件地址进行搜索。就像
SELECT * FROM email_eml WHERE (all the columns combined) = $email;
电子邮件的存储中没有 . 和 @ 在我希望最终结果包含这些列的两列中。
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
然而:
- 不要使用
*
.这对性能来说很糟糕。 - 我当然希望您的
$email
变量被转义并且没有SQL注入风险。如果不是,请使用预准备语句。
为了让MySQL使用索引(你确实索引了这些列,不是吗?),我宁愿拆分你的输入电子邮件地址,然后分别搜索每个字段,即:
SELECT CONCAT(name, '@', host, '.', domain) AS email
WHERE name = 'user' AND host = 'mysite' AND domain = 'com'
是否确实需要在数据库中将三个电子邮件地址组件分开?否则,只需存储完整的电子邮件。
SELECT * FROM email_eml WHERE name+'@'+host+'.'+domain = '$email';
您可以使用CONCAT()
函数。
那么你的请求将是:
SELECT * FROM email_eml WHERE CONCAT(name,'@',host,'.',domain) = $email