我有一个包含users
所有数据的表格。 Users
可以有多个email
地址,因此我需要将它们存储在单独的表格中。
我想根据email
地址运行搜索,这些地址会返回有关user
的所有信息。 (我也希望能够通过存储在用户表中的用户名搜索用户表)
将电子邮件地址存储在我的数据库中的最佳方法是什么?
我不认为在用户表中引入冗余的电子邮件地址字段是一个好主意,但可能是??
现在我有一个用户表链接到电子邮件表,其中1:M关系。 (因此,电子邮件地址包含user_id作为其主键的一部分)
在我存储电子邮件后,通过mySql查询获取所有信息的最佳方法是什么(所以请在答案中包含mySQL)
我知道JOIN
操作,但我不知道如何在此搜索中使用它。
答案 0 :(得分:3)
您可以存储您的数据,假设所有电子邮件都是唯一的(我在那里添加了UNIQUE KEY
)
CREATE TABLE `users` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
PRIMARY KEY (`id`)
) DEFAULT CHARSET=utf8;
CREATE TABLE `emails` (
`email` varchar(50) NOT NULL,
`user_id` int(10) unsigned NOT NULL,
PRIMARY KEY (`email`),
KEY `user_id` (`user_id`)
) DEFAULT CHARSET=utf8;
您可以检索特定电子邮件的数据:
SELECT users.*, emails.email
FROM users
JOIN emails ON users.id = emails.user_id
WHERE emails.email = 'some_mail@example.com'
您还可以选择用户喜欢的所有电子邮件:
SELECT users.*, GROUP_CONCAT(emails.email)
FROM users
LEFT JOIN emails ON users.id = emails.user_id
WHERE users.id = 1234
GROUP BY users.id
答案 1 :(得分:-1)
table user_email with (id_user,email)
之后,您可以通过电子邮件或用户ID进行搜索