我正在更新我們學校的網站,並且我們有一系列可用的課程列表。MySQL創建相關課程列表
的課程列表在tbl_course_details:
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_course_related:
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
然而,這使得列表看起來像這樣(如果我編輯地理)
Related? Course Name
No History
Yes History
No Art
很明顯,我不希望兩次列表中的歷史記錄,特別是在信息衝突的情況下。
任何想法?
謝謝!目前它似乎工作得很好,我會嘗試在一個更大的數據集上進行測試,但看起來正是我想要的。 –