2012-03-10 14 views
0

ユーザーが連絡先情報とユーザー名とパスワードを入力する登録ページ。私は2つのテーブルを持っています.1つはusernameとpasswordのためのもので、contactinfoという外部キーと、私はusersテーブルと結合したい連絡先情報のテーブルを持っています。外部キーと主キーの両方を自動インクリメントに設定する必要がありますか?どのようなタイプの参加が必要ですか?

ありがとう

答えて

2

両方のプライマリキーを自動インクリメントに設定します。連絡先情報テーブルとあなたの完了にユーザーテーブルからの外部キーを追加します。外部キーはとなりません。の自動インクリメントは、すべてになります。別のテーブルの値にを参照してください。

DoctrineのようなORMを使用している場合、usercontactinformationの関係は自動的に処理されることに注意してください。それ以外の場合は、連絡先情報を最初に挿入し、生成された主キー(たとえばmysql_insert_id経由)を取得して、userテーブルに挿入します。

+0

こんにちはおかげのようになります。返事、これは私がすでに持っているものです。私の混乱は、データベースにデータを追加するときから来ています。私はユーザーのテーブルにユーザー名とパスワードを挿入しますが、次に名前のメールアドレスなどを追加するために行をリンクします – Biscuit128

+0

私の答えにいくつかの情報を追加しました。 – Perception

+0

私は生成された鍵を取得する必要があると言います - いつも正しい鍵を返すことを確実にする方法はありますか? – Biscuit128

1

、ユーザのテーブルが持つべき:

  • ユーザーID(プライマリー、自動インクリメント)
  • ユーザ名
  • パスワードを

他のテーブルがあります。

  • infoid(主に、オートインクリメント)
  • ユーザーID
  • し、データ...

あなたは "左結合"

LEFTは、キーワードを返すすべての行をJOINを使用する必要があります(これは、他のテーブルにこの行をリンクします)右側のテーブル(table_name2)に一致するものがなくても、左側のテーブル(table_name1)から取得します。 (w3schools)

私たちはusersテーブルを "left table"、情報を "right table"としています。ユーザーはまだ情報が設定されていないかもしれませんが、アカウントを持っています。私たちは、アカウント(「左」)必ずしも必要ではない情報(「右」)している - ジョブに参加

のような音をLEFT JOINをし、あなたのSQLは、おおよそのため

SELECT "columns" FROM table1 
LEFT JOIN table2 ON table1.userid = table2.userid 

//where "columns" are the columns you want to get 
//from the tables in "table.column" notation like: user.username or info.mobile