以下是我所涉及的数据库表的简短摘要:
课程
学校
学科
(表格中还有其他列,但它们与问题无关)
我正在尝试选择Courses.SchoolId =给定SchoolId的所有课程,学校所述学校的名称,与每门课程相关的所有学科的名称,以及按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行中对别名进行别名?否则我会得到一个非唯一的错误,但我不明白为什么。
谢谢!
答案 0 :(得分:2)
使用指定的关键字JOIN
而不是AND
SELECT Courses.*,
Disciplines.Name as Discipline,
Schools.Name as School
FROM Courses
INNER JOIN Schools
ON Courses.SchoolId = Schools.SchoolId
INNER JOIN Disciplines
ON Disciplines.DisciplineId = Courses.DisciplineId
WHERE Courses.SchoolId = :schoolId
ORDER BY Disciplines.Name ASC
排序时,请使用ORDER BY
而不是SORT
要进一步了解联接,请访问以下链接: