MySQL创建相关课程列表
我正在更新我们学校的一个网站,我们有一个课程列表 课程列表见tbl_课程详情:MySQL创建相关课程列表,mysql,join,relationships,Mysql,Join,Relationships,我正在更新我们学校的一个网站,我们有一个课程列表 课程列表见tbl_课程详情: CREATE TABLE `tbl_course_details` ( `uid` int(11) NOT NULL auto_increment, `course_name` varchar(100) NOT NULL, `course_type` varchar(100) NOT NULL, `course_details` longtext NOT NULL, `cour
CREATE TABLE `tbl_course_details` (
`uid` int(11) NOT NULL auto_increment,
`course_name` varchar(100) NOT NULL,
`course_type` varchar(100) NOT NULL,
`course_details` longtext NOT NULL,
`course_added_by` int(4) NOT NULL,
`course_last_updated` int(30) NOT NULL,
`course_menu_id` int(4) NOT NULL,
PRIMARY KEY (`uid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=15;
我还有一张名为tbl_课程相关的表格:
CREATE TABLE IF NOT EXISTS `tbl_course_related` (
`uid` int(11) NOT NULL auto_increment,
`course_id` int(4) NOT NULL,
`related_course_id` int(4) NOT NULL,
PRIMARY KEY (`uid`),
KEY `course_id` (`course_id`),
KEY `related_course_id` (`related_course_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=25;
当工作人员编辑课程时,他们还将获得所有课程的列表(他们当前正在编辑的课程除外)。旁边还有复选框,因此如果课程与他们正在编辑的课程相关,他们会勾选该复选框
我的课程详情表目前有3门课程:
Unique ID Course Name
---------------------------
1 Geography
2 History
3 Art
例如,我将地理与历史相关联,历史与艺术相关联,因此我的关系表如下所示:
Unique ID Course ID Related Course Id
--------------------------------------------
1 1 2
2 2 1
3 2 3
4 3 2
我希望到目前为止这是有道理的。
现在,如果有工作人员去编辑地理课程(课程ID:1),那么我想要一个包含历史和艺术的课程列表,并且只勾选历史复选框
我当前的SQL查询看起来是这样的(尽管我对它做了一些更改,但到目前为止没有任何效果):
然而,这使得列表看起来像这样(如果我编辑地理)
显然,我不希望历史在列表中出现两次,尤其是在信息冲突的情况下
有什么想法吗?试试这个:
SELECT d.uid,
d.course_name,
r.related_course_id
FROM tbl_course_details d
LEFT JOIN tbl_course_related r
ON r.course_id = d.uid
AND d.uid!=:courseId
GROUP BY r.course_id
或者您可以使用DISTINCT::
SELECT
DISTINCT(d.course_name),
d.uid,
r.related_course_id
FROM tbl_course_details d
LEFT JOIN tbl_course_related r
ON r.course_id = d.uid
AND d.uid!=:courseId
GROUP BY r.course_id
这是一本书。如果结果数据集r.related\u course\u id
不为空,则应勾选复选框
SELECT d.uid,
d.course_name,
r.related_course_id
FROM tbl_course_details d
LEFT JOIN tbl_course_related r
ON (r.course_id = d.uid) and (r.Related_Course_Id=:courseId)
where d.uid!=:courseId
不幸的是,我尝试了一个group by子句,但它没有按预期工作,尽管它从列表中删除了重复的课程,但删除的课程实例也是将其与正在编辑的当前课程链接起来的实例谢谢!目前它似乎工作得很好,我将尝试在更大的数据集上测试它,但它看起来正是我想要的。
SELECT
DISTINCT(d.course_name),
d.uid,
r.related_course_id
FROM tbl_course_details d
LEFT JOIN tbl_course_related r
ON r.course_id = d.uid
AND d.uid!=:courseId
GROUP BY r.course_id
SELECT d.uid,
d.course_name,
r.related_course_id
FROM tbl_course_details d
LEFT JOIN tbl_course_related r
ON (r.course_id = d.uid) and (r.Related_Course_Id=:courseId)
where d.uid!=:courseId