0

これが私のPHPデータベース構造です:http://pastebin.com/x89AdzfS

PDOを使用してJOINSQLクエリを機能させるために何時間も試みてきましたが、失敗したので、ここでいくつかの助けが必要です。

学生も登録されているクラスIDに割り当てられているすべての「割り当て」(タイトルと説明)を表示するPDOクエリが必要です。

もっと具体的にする必要があるかどうか教えてください。ありがとう!

編集

これが私が行ったクエリで、人がいるクラスを表示します

$sql = $db->prepare("SELECT enrollments.*, courses.*, students.* FROM enrollments
LEFT JOIN courses ON enrollments.course_id = courses.id
LEFT JOIN students ON students.id = enrollments.student_id
WHERE enrollments.student_id = ?
");
$sql->execute(array($login_id));

while($row = $sql->fetch(PDO::FETCH_ASSOC))
     {
    echo "<li><a href='class.php?id=".$row['course_id']."'><i class='icon-book'></i>".$row['name']."</a></li>";
}
4

1 に答える 1

2

これは、あなたが求めていると思うことを達成するための比較的簡単な結合です。

$sql = $db->prepare("SELECT 
  title, 
  description, 
  courses.name
FROM assignments
JOIN courses ON courses.id = assignments.course_id
JOIN enrollments USING(course_id)
WHERE enrollments.student_id = ?");

$sql->execute(array($login_id));

クエリを使った私の思考プロセスは次のようになります。

  1. どちらが「メイン」テーブルであるかを決定します。「すべての割り当てを表示する」と言ったので、それは「割り当て」です
  2. そのテーブルはFROMの後の最初のテーブルです
  3. 私には特定の学生がいることを知っているので、ドメインロジックに意味のある「student_id」への最短パスを見つけます
  4. 「enrollments」にはstudent_idがあり、私の割り当て登録にはcourse_idがあります。これがstudent_idへの私のパスです
  5. 割り当てとの関係に関係する要素にJOIN登録します(列がUSING()と同じ名前の場合にSQLで簡単になります)

クエリとの違いは(私が見ているように)、絶対宛先エンティティを元のFROMテーブルとして使用し、そこから結合することです。割り当てが必要な場合は、クエリをで開始しFROM assignments、結合を使用して、結果を制限するために使用する必要のあるデータを取得する必要があります。

于 2012-08-15T01:49:31.007 に答える