2

適切な選択ステートメントを作成する方法に本当にこだわっており、提供できるガイダンスをいただければ幸いです。

ユーザーがファイルをアップロードし、それらのファイルをカテゴリ別に分類できるようにするミニドキュメント管理システムを作成しました。各ファイルには、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
4

2 に答える 2