从两个相互链接的表中运行搜索的最佳方式(使用FK)

时间:2012-06-16 11:55:40

标签: mysql database-design

我有一个包含users所有数据的表格。 Users可以有多个email地址,因此我需要将它们存储在单独的表格中。

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

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

在我存储电子邮件后,通过mySql查询获取所有信息的最佳方法是什么(所以请在答案中包含mySQL)

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

2 个答案:

答案 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进行搜索