0

つまり、4つのテーブルがあります。

tbl_users
tbl_college
tbl_courses
tbl_sections

tbl_usersもちろん含まれていますusernamepassword

次のような特定のユーザーに関するすべての情報を取得したい場合はどうすればよいでしょうか。

  1. 彼/彼女が所属している大学は何ですか (例:工学部または経営学部)

  2. 彼/彼女が取っているコースは何ですか (例:土木工学の理学士またはマーケティングの理学士)

  3. 彼/彼女はどのセクションに所属していますか (例: CBCまたはITED )

次のようtbl_coursesに設定されている場合:

tbl_courses (id, course_name, college_id)

college_idを指す場所tbl_college.id

そして tbl_sections は次のように設定されています:

tbl_sections(id, section_name, course_id)

course_idを指す場所tbl_course.id

ユーザーに関連するすべての情報を選択するusernameにはどうすればよいですか。この場合は、、、、、passwordcollegecoursesection

私が念頭に置いているのは、次tbl_user_sectionのように: という別のテーブルを作成できるということです。

 CREATE TABLE tbl_user_section (user_id INTEGER NOT NULL, section_id INTEGER NOT NULL,
 FOREIGN KEY user_id REFERENCES users(id),
 FOREIGN KEY section_id REFERENCES sections(id))

そのため、誰がどのセクションにいるかを保持するテーブルを作成できます。また、私の意見では、そのようにすることで、結合を簡単に実行して関連情報を取得できます。

SELECT tbl_users.username, tbl_sections.section_name FROM tbl_users 
INNER JOIN tbl_user_section ON tbl_users.id = tbl_user_section.user_id 
INNER JOIN tbl_sections ON tbl_sections.id = tbl_user_section.section_id

この種のセットアップで最近発生した問題は、ユーザーがまだセクションにいない場合、上記のコードですべてのユーザーを照会しようとすると、そのユーザーが選択されないか、表示されないことです。

また、この種のセットアップでは、おそらくこれを行うことができます

SELECT tbl_users.username, tbl_sections.section_name,
tbl_courses.course_name, tbl_colleges.college_name FROM tbl_users 
INNER JOIN tbl_user_section ON tbl_users.id = tbl_user_section.user_id 
INNER JOIN tbl_sections ON tbl_sections.id = tbl_user_section.section_id
INNER JOIN tbl_courses ON tbl_courses.id = tbl_sections.course_id
INNER JOIN tbl_colleges ON tbl_college.id = tbl_courses.college_id

クエリに含まれるこれらの情報を取得します。

私が作成したセットアップから他にどのような問題が見られると思いますか?

section_id私が行ったように別のテーブルを作成するのではなく、`tbl_users にフィールドを含める方が賢明ですか?

ユーザーのタイプがある場合、同じことを行う必要がありますか (ユーザーの種類ごとにテーブルを分けます) tbl_user_type、同じテーブルにそれらを持っているか、単に持っている必要がありますtbl_users

これが大きなプロジェクトだとしたら、何を選びますか?

4

1 に答える 1

2

ユーザーが 1 つ以上のテーブルから欠落しているために表示されない場合は、 を使用しOUTER JOINて、それらのテーブルから取得される列に NULL 値を指定して表示させることができます。したがって、セクションを持たない学生は section_name の値が NULL になりますが、他のすべての情報はそのまま残ります。

于 2012-11-11T06:06:00.560 に答える