我有一个名为
的表过滤
page companyA companyB companyC filterA filterB
page1 Google Microsoft Apple hardware web
page2 Oracle Microsoft Lenovo database web
公司
company hardware web database
Google YES YES YES
Sony YES YES NO
Oracle NO YES YES
Apple YES YES NO
Lenovo YES NO YES
Microsoft YES YES YES
我需要根据过滤器中的过滤条件显示表公司中的公司列表。
对于filter的第一行,对于page1,我有以下变量:
filterA = hardware
filterB = web
filterA和filterB的值只是公司中的列。要构建页面,我需要检查它们是否标记为“是”。
因此,对于第1页,查询将是:
select * from companies where hardware = 'YES' and web = 'YES';
这将输出 -
Google
Sony
Apple
Microsoft
但我还需要考虑以下列: companyA,companyB和companyC 来自过滤器表。
因此,对于page1,结果应为:
Google
Microsoft
Apple
Sony
关于如何调整我的选择查询以显示基于companyA,companyB和companyC的有序列表的任何想法?
答案 0 :(得分:0)
嗨,正如您从评论中看到的那样,您的表格未正常化。在这种情况下,您可以使用filter和UNION ALL命令进行多次选择。
所以你的查询将是:
SELECT
[C].*
FROM companies AS [C]
INNER JOIN filter AS [F] ON [F].companyA = [C].company
WHERE hardware = 'YES' and web = 'YES'
UNION ALL
SELECT
[C].*
FROM companies AS [C]
INNER JOIN filter AS [F] ON [F].companyB = [C].company
WHERE hardware = 'YES' and web = 'YES'
UNION ALL
SELECT
[C].*
FROM companies AS [C]
INNER JOIN filter AS [F] ON [F].companyC = [C].company
WHERE hardware = 'YES' and web = 'YES'
答案 1 :(得分:0)
你应该规范化你的表格
而不是带有固定列的过滤器和公司表,您应该标准化为:
table company
id,
company_name
table filter_tag
id,
tag
table company_filter_status
id_company
id_filter_tag_id
status /* YES or NOT */
table filter_relation
page,
company_id,
filter_tag_id