以下是工作查询:
$sql_project_data = "SELECT P.project_id, P.project_name, P.project_type,
F.professor_first_name, F.professor_last_name, C.course_id
FROM sl_student_course S
INNER JOIN sl_course C
ON C.course_id = S.course_id
INNER JOIN sl_professor F
ON F.professor_id = C.professor_id
INNER JOIN sl_project_course PC
ON PC.course_id = C.course_id
INNER JOIN sl_project P
ON P.project_id = PC.project_id
WHERE S.student_id = '" . $_SESSION['user_id'] . "'";
我想在where子句中添加条件“sl_project_course_student.project_id<> 33” - 但是,当我尝试执行此操作时,查询将停止工作(原始查询中曾经识别过的列不再被承认)。
$sql_project_data = "SELECT P.project_id, P.project_name, P.project_type,
F.professor_first_name, F.professor_last_name, C.course_id,
G.project_id
FROM sl_student_course S, sl_project_course_student G
INNER JOIN sl_course C
ON C.course_id = S.course_id
INNER JOIN sl_professor F
ON F.professor_id = C.professor_id
INNER JOIN sl_project_course PC
ON PC.course_id = C.course_id
INNER JOIN sl_project P
ON P.project_id = PC.project_id
WHERE S.student_id = '" . $_SESSION['user_id'] . "'
AND G.project_id <> 33";
注意,我在“From”之后选择了第二个表,并在where子句中添加了“And”。
我假设语法错误,我应该如何更改它以使它在语法上正确?
答案 0 :(得分:0)
在第二个查询中添加了一个新表:
sl_project_course_student G
<\ n>在from列表中没有将它连接到任何其他表...如果你将它加入相应的表怎么办?
答案 1 :(得分:0)
$sql_project_data = "SELECT P.project_id, P.project_name, P.project_type, F.professor_first_name, F.professor_last_name, C.course_id, G.project_id
FROM sl_student_course S
INNER JOIN sl_course C ON C.course_id = S.course_id
INNER JOIN sl_professor F ON F.professor_id = C.professor_id
INNER JOIN sl_project_course PC ON PC.course_id = C.course_id
INNER JOIN sl_project P ON P.project_id = PC.project_id
LEFT JOIN sl_project_course_student G ON P.project_id = G.project_id AND C.course_id = G.course_id AND S.student_id = G.student_id
WHERE S.student_id = '" . $_SESSION['user_id'] . "' AND IFNULL(G.project_id, 33) <> 33)";
答案 2 :(得分:0)
您的第二个查询缺少表JOIN
的{{1}}语法。基于您正在尝试添加G.project_id的事实,您似乎将使用表sl_project_course_student
加入
sl_project
以下是visual explanation of joins
上的有用链接根据您说您正在寻找不在sl_project_course_student表中的那些项目的事实,您可能需要这样:
$sql_project_data = "SELECT P.project_id, P.project_name, P.project_type,
F.professor_first_name, F.professor_last_name, C.course_id,
G.project_id
FROM sl_student_course S, sl_project_course_student G
INNER JOIN sl_course C
ON C.course_id = S.course_id
INNER JOIN sl_professor F
ON F.professor_id = C.professor_id
INNER JOIN sl_project_course PC
ON PC.course_id = C.course_id
INNER JOIN sl_project P
ON P.project_id = PC.project_id
LEFT JOIN sl_project_course_student G
ON P.project_id = G.project_id
WHERE S.student_id = '" . $_SESSION['user_id'] . "'
AND G.project_id <> 33";