3

私は複雑なデータベース関係を持っています(私にとってはその複雑な関係です)。理論的には、これは優れた設計だと思いますが、私の障害は、可能な限り少ないクエリでデータを取得することです。これが私が持っているデータベース構造です:

学生テーブル: 名前、電話番号、メールアドレスなどのフィールド。

student_requirementsテーブル(マッピングテーブル): student_id、requirement_id、date

要件テーブル(要件タイプに属する): id、requirement_type_id、name

require_typeテーブル(多くの要件があります): id、type、name、

さて、これがその使用方法の例です。要件タイプを作成できます。例は、割り当てのようなものです。各割り当てには複数の要件があります。学生は特定の課題の要件を渡すことができますが、必ずしもすべての課題の要件を渡す必要はありません。ですから、生徒ごとにすべての課題を照会したいと思います。つまり、システムに50の割り当てが入力されており、jonsmithがそれらの割り当てのうち4つの要件を入力したとします。jon smith idでクエリを実行して、彼が要件を入力したすべての割り当てを見つけたいと思います。

それが理にかなっていることを願っています。私の唯一の推測は結合を使用することですが、正直なところ、私はそれらをあまりよく理解していません。

どんな助けでも素晴らしいでしょう!

4

1 に答える 1

2

これを試して:

SELECT * FROM student_table, students_requirements_table,
requirements_table, requirement_type_table
WHERE student_table.name = "Jon Smith"
AND students_requirements_table.id = student_table.id
AND requirements_table.id = students_requirements_table.requirement_id
AND requirement_type_table.id = requirements_table.requirement_type_id;

いくつかのことを想定しなければならなかったので(テーブル名の一部にアンダースコアがあるなど)、テーブル名が正確であることを確認し、上記のすべてが実際には1つの長い行である必要があることに注意してください(ただし、このページでは読めないので、複数行に分割しました)。

現時点ではLAMPリグのセットアップがないため、これをモックアップしてテストすることはできません。MySQL結合を作成する必要があったのでしばらく経ちましたが、これは正しい方向に進んでいると思います。

LEFT JOINを使用する必要がある場合は、次のページを参照してください。3つ以上のテーブルをリンクするための左結合

于 2012-09-01T20:16:39.290 に答える