我真的被困在如何创建适当的选择声明,并希望你能提供任何指导。
我创建了一个迷你文档管理系统,允许用户上传文件并按类别对这些文件进行分类。每个文件可以选择一个或多个类别。以下是我的桌子:
表:文件(pKey(主键)、文件名、文件描述、文件路径)

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/

除此之外还有其他部门,因此路径字段也会改变(只是我想我会把那一点数据丢进去)
表:类别(pKey(主键),类别说明)
pKey  category_description
1     Central Missouri Campus
2     Eastern Missouri Campus
3     Western Missouri Campus
4     Desktops
5     Laptops
6     Networks
7     Printers

当然还有其他种类,这只是一个抽样
表:类别外部参照(pKey(主键)、fk_文件id、fk_类别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

当用户搜索相关文档时,会显示一个带有类别复选框的表单。通过选择“中心”,他们将获得标记为“中心”的所有文件。通过选择桌面,他们可以获取任何标记为桌面的文档。但是,当他们选择中央和桌面时,他们会得到任何中央或桌面文档。我需要弄清楚如何只获取那些同时是中心和桌面的文档以及它们选择的任何其他复选框,并排除不包含所有选中复选框的文档。
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

最佳答案

最简单的方法可能是:

SELECT f.pkID, f.file_name, f.file_description, f.file_path
FROM files f
JOIN category_xref  cox ON cox.fk_file_id = f.pkID
WHERE cox.fk_category_id IN (59, 69)
GROUP BY f.pkID
HAVING count(distinct cox.fk_category_id)=2
ORDER BY f.file_name ASC

关于mysql - 一对多关系查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17344724/

10-12 18:00