2017-06-16 15 views
1

私は非常にMySQLの初心者です。私は今、このように見える2つのテーブルがあります。MySQLはテーブルに動的な量を追加します

イベント:

+-------+-------------+ 
| Field | Type  | 
+-------+-------------+ 
| id | int(11)  | 
| name | varchar(30) | 
| date | datetime | 
+-------+-------------+ 

をユーザー:

+----------+-------------+ 
| Field | Type  | 
+----------+-------------+ 
| name  | varchar(30) | 
| amount | int   | 
+----------+-------------+ 

今私は、イベントへのユーザーの動的な量を追加できるようにしたいと思いますしかし、私はどのように私はそのような動作を実装する必要がありますか、またはそのための動的テーブルを作成する必要がありますか分からない。ベストプラクティスは何でしょうか?

助けていただければ幸いです。

+0

あなたは、テーブルの関係にチェックアウトする場合があります。多くのユーザーが多数の投稿を訪問している間に、多数のユーザーが訪問したコメントと投稿をOWNSするユーザーのような他の多くのアイテムに属する1つのアイテム)があります。これに関する非常に役立つチュートリアルはここにあります:https://code.tutsplus.com/articles/sql-for-beginners-part-3-database-relationships--net-8561 – Gegenwind

答えて

3

これは古典的な多対多の関係です。あなたはそれがANのすべてのユーザーを取得するには、この

event_id | user_id 
1  | 3 
1  | 4 

のように見えます(ID = 1)2人のユーザ(ID = 3,4)を有するイベントについて

event_users table 
----------------- 
event_id 
user_id 

を新しいテーブルを追加することによって、それを扱いますイベントあなたはこの

select u.name 
from users u 
join event_users eu on eu.user_id = u.id 
join events e on eu.event_id = e.id 
where e.name = 'my event' 
+0

ありがとうございました。私はそれが多対多関係であることを知らなかった。私は間違いなくそれらの異なるタイプのより多くを読むでしょう。 –

2

あなたは第三のテーブルを必要とするだろう、ジャンクションテーブル:

create table UserEvents (
    UserEventId int auto_increment primary key, 
    UserId int, 
    EventId int, 
    constraint fk_userevents_userid foreign key (UserId) references Users(id), 
    constraint fk_userevents_eventid foreign key (EventId) references Events(id) 
); 

注:

  • 私は複数のテーブルに名前を付けます。
  • 重複が許可されていない場合は、テーブルのidはので、私はUsers(UserId)Events(EventId)を好む(「ID」に続く特異である。
  • これは、外部キー関係を宣言した。
  • 、その後、あなたはまた、ユニークな制約をしたいです(UserId, EventId)に。このため
+0

迅速な回答をいただきありがとうございます。それらは私のような初心者のための良いヒントです。 –

+0

'constraint .... foreign key .... references .... 'は、デフアルエンジンがInnoDBの場合のみ動作します。デフアルエンジンがInnoDBでない場合は、' engine = InnoDB'を追加する必要がありますcreate tableステートメント –

1

あなたがイベントと関連するユーザーIDを維持するべき第三のテーブルを使用する必要があります。

user_event

id user_id event_id created_date 

USER_IDとのevent_idが、このテーブルの外部キーであり、ユーザーとイベントテーブルの主キーを指していますそれぞれ

関連する問題