適切な選択ステートメントを作成する方法に本当にこだわっており、提供できるガイダンスをいただければ幸いです。
ユーザーがファイルをアップロードし、それらのファイルをカテゴリ別に分類できるようにするミニドキュメント管理システムを作成しました。各ファイルには、1 つまたは複数のカテゴリを選択できます。以下は私のテーブルです:
表: ファイル (pKey (主キー)、file_name、file_description、file_path)
pKey file_name file_description file_path
1 IT001.DOC Network Design Document /common/it/
2 IT002.DOC Desktop Standards /common/it/
3 IT003.DOC Laptop Standards /common/it/
IT 以外にも他の部門があるため、パス フィールドも変更されます (データのビットを入れようと思っただけです)。
表: カテゴリ (pKey (主キー)、category_description)
pKey category_description
1 Central Missouri Campus
2 Eastern Missouri Campus
3 Western Missouri Campus
4 Desktops
5 Laptops
6 Networks
7 Printers
もちろん他のカテゴリーもありますが、これはほんの一例です
表:category_xref(pKey(主キー)、fk_file_id、fk_category_id)
pKey fk_file_id fk_category_id
1 1 1
2 1 2
3 1 6
4 2 2
5 2 3
6 2 4
7 3 1
8 3 2
9 3 3
10 3 5
ユーザーが関連ドキュメントを検索すると、[カテゴリ] チェックボックスを含むフォームが表示されます。Central を選択すると、Central としてマークされたすべてのファイルが取得されます。デスクトップを選択すると、デスクトップとしてマークされたすべてのドキュメントが取得されます。ただし、Central AND Desktops を選択すると、Central OR Desktops のドキュメントが表示されます。Central と Desktops の両方、およびそれらが選択した他のチェックボックスであるドキュメントのみを取得し、選択したすべてのチェックボックスを含まないドキュメントを除外する方法を理解する必要があります。
SELECT f.pkID, f.file_name, f.file_description, f.file_path, cox.fk_category_id
FROM files f
JOIN category_xref cox ON cox.fk_file_id = f.pkID
WHERE cox.fk_category_id IN (59, 69)
ORDER BY f.file_name ASC, cox.fk_category_id ASC