学校のウェブサイトを更新していて、利用可能なコースのリストがあります。
コースのリストは 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
明らかに、特に矛盾する情報がある場合は、履歴をリストに 2 回入れたくありません。
何か案は?