-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 に答える