Mysql SQL对公司名称进行优先级排序
我叫了一张桌子 过滤器 公司 我需要显示表中的公司列表,这些公司基于过滤器中的筛选条件 对于filter的第一行,对于page1,我有以下变量:Mysql SQL对公司名称进行优先级排序,mysql,sql,Mysql,Sql,我叫了一张桌子 过滤器 公司 我需要显示表中的公司列表,这些公司基于过滤器中的筛选条件 对于filter的第一行,对于page1,我有以下变量: filterA = hardware filterB = web filterA和filterB的值只是公司中的列。要构建页面,我需要检查它们是否标记为YES 因此,对于第1页,查询将是: select * from companies where hardware = 'YES' and web = 'YES'; 这将输出- Google Son
filterA = hardware
filterB = web
filterA和filterB的值只是公司中的列。要构建页面,我需要检查它们是否标记为YES
因此,对于第1页,查询将是:
select * from companies where hardware = 'YES' and web = 'YES';
这将输出-
Google
Sony
Apple
Microsoft
但我还需要考虑以下列-筛选表中的companyA、companyB和companyC
因此,对于第1页,结果应该是:
Google
Microsoft
Apple
Sony
关于如何调整select查询以显示基于companyA、companyB和companyC的有序列表,您有什么想法吗?您好,您可能从注释中看到,您的表没有规范化。在这种情况下,您可以使用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'
你应该规范化你的表格 您不应使用固定列的筛选器和公司表,而应将其规范化为:
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
您的
过滤器表未规范化。你能改变桌子的设计吗?你应该规范你的桌子tables@juergend-该表已由其他人创建。我需要利用它。我们的大多数应用程序代码都是基于这些表编写的。所以在这一点上不能有太大的改变。@scaisEdge-你能告诉我如何规范化这些表吗?谢谢。companyA、companyB和companyC优先级过滤器如何?
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'
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