0

関連するデータベーステーブルの簡単な要約を次に示します。

コース

  • コースID
  • 学校ID
  • 分野 ID
  • 名前

学校

  • 学校ID
  • 名前

規律

  • 分野 ID
  • 名前

(表には他の列がありますが、質問にはあまり関係ありません)

Courses.SchoolId = 特定の SchoolId、Schools からのその学校の名前、各コースに関連付けられているすべての分野の名前、および Disciplines.Name で並べ替えたすべてのコースを選択しようとしています。この要約が意味をなさない場合、おそらく私のクエリは次のようになります。

 $prep = $pdo->prepare('SELECT Courses.*, Disciplines.Name as Discipline, Schools.Name as School
                        FROM Courses
                        JOIN Courses AS C ON Courses.SchoolId = :schoolId
                        AND Schools ON Schools.SchoolId = :schoolId
                        AND Disciplines ON Disciplines.DisciplineId = Courses.DisciplineId
                        ORDER BY Disciplines.Name ASC');
$prep->bindParam(':schoolId', $schoolId, PDO::PARAM_INT);

if(!$prep->execute()){
    print_r($pdo->ErrorInfo());
}

エラーは次のとおりです。

Warning: PDOStatement::execute(): SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'ON Schools.SchoolId = '115773' AND Disciplines ON Disciplines.Disciplin' at line 4 in /Users/foremanjordan/Web Dev/Cleerly/src/scripts/addCourse.php on line 24

私は一生、これがなぜなのか理解できません。私はまだJOINの使用にかなり慣れていないので、私の無知と関係があると確信していますが、これまでに理解したところで、これはうまくいくはずですか?

また、一種の補足的な質問として、最初の JOIN 行で Courses にエイリアスを設定する必要がある理由を誰か理解していますか? そうしないと、一意ではないエラーが発生しますが、その理由がわかりません。

ありがとうございました!

4

1 に答える 1