表1 - 课程
course_id
name
category_id
status
表2 - 类别
category_id
category_name
表3 - 教授
prof_id
prof_name
表4 - COURSEANDPROF (课程和教授关系表,每门课程可以有多位教授)
id
course_id
professor_id
我在我的页面中创建两个选择来过滤我学校的课程,我没有问题为类别设置where子句:
if ($_POST['category']) {
$category = "AND courses.category_id = ".$_POST['category'];
}
select courses.*,category.name from courses INNER JOIN category ON courses.category_id = category.category_id where courses.status = 1 ".$categoria
如果每门课程都有一位以上的教授,我如何才能在教授的位置上找到?
例如:
Course: Learn Jquery
Category: Javascript
Professors: Kevin Smith, Sara Logan
表课程
course_id | name | category_id | status
--------------------------------------------------------
1 | Learn Jquery | 1 | 1
2 | Learn Mysql | 3 | 0
表类别
category_id | name
------------------------
1 | Javascript
3 | Database
表教授
prof_id | name
------------------------
12 | Kevin Smith
33 | Mike White
34 | Sara Logan
表课程和个人资料
id | course_id | professor_id
-----------------------------------
12 | 1 | 12
33 | 1 | 34
34 | 2 | 33
我需要按类别或/和教授过滤。
答案 0 :(得分:1)
我会使用这个SQL代码:
SELECT courses.course_id AS course_id, courses.name AS course_name,
category.name AS category_name,
GROUP_CONCAT(DISTINCT professor.name SEPARATOR ', ') AS professor_name
FROM courses
LEFT JOIN category ON category.category_id = courses.category_id
LEFT JOIN courseandprof ON courseandprof.course_id = courses.course_id
LEFT JOIN professor ON professor.prof_id = courseandprof.professor_id
WHERE courses.status = 1
GROUP BY courses.course_id;
除了WHERE子句,您可以将其他过滤器放在那里,例如。 professor.prof_id = 12
或category.category_id = 1
。
如果一门课程有多位教授,这个查询会显示一行课程,并且连接教授的", "
分隔符。
course_name: "Learn Jquery"
category_name: "Javascript"
professor_name: "Kevin Smith, Sara Logan"
要查询的主表格为courses
。然后我们离开了加入category
,courseandprof
和professor
表。如果通过courseandprof
表将相同的课程与多位教授相关联,则会显示每个课程的多行。这就是为什么我们需要按程序对它进行分组(使用course_id
),然后我们在SELECT子句中连接教授名称。
答案 1 :(得分:0)
您可以创建一个请求:
SELECT c.category_id, c.category_name, co.course_id, cp.professor_id, p.prof_name
FROM `category` AS c
INNER JOIN `course` as co ON c.category_id = co.category_id
INNER JOIN `courseandprof` as cp ON co.course_id = cp.course_id
INNER JOIN `professor` as p ON p.prof_id = cp.professor_id
WHERE c.category_id = 1
您将category_id设置为此请求