関連するデータベーステーブルの簡単な要約を次に示します。
コース
- コース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 にエイリアスを設定する必要がある理由を誰か理解していますか? そうしないと、一意ではないエラーが発生しますが、その理由がわかりません。
ありがとうございました!