-2

我有一个包含所有数据的表usersUsers但是可以有多个email地址,所以我需要将它们存储在单独的表中。

我想根据email返回所有信息的地址运行搜索user。(我还希望能够通过存储在用户表中的用户名搜索用户表)在我的数据库中存储电子邮件地址的最佳方法是什么?我不认为在用户表中引入冗余的电子邮件地址字段是一个好主意,但可能是?

现在我有一个用户表链接到具有 1:M 关系的电子邮件表。(因此电子邮件地址包含 user_id 作为其主键的一部分)

在我存储电子邮件地址之后,使用 mySql 查询获取所有信息的最佳方式是什么(因此请在您的答案中包含 mySQL)

我知道JOIN操作,但我不知道如何在此搜索中使用它。

4

2 回答 2

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
于 2012-06-16T12:20:57.243 回答
-1

table user_email with (id_user,email)

之后,您可以通过电子邮件或用户 ID 进行搜索

于 2012-06-16T11:58:31.370 回答