以下是我所涉及的数据库表的简要总结:
培训班
- 课程编号
- 学校编号
- 学科 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 起别名吗?否则我会收到一个非唯一错误,但我不明白为什么。
谢谢!