Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL对公司名称进行优先级排序_Mysql_Sql - Fatal编程技术网

Mysql SQL对公司名称进行优先级排序

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

我叫了一张桌子

过滤器

公司

我需要显示表中的公司列表,这些公司基于过滤器中的筛选条件

对于filter的第一行,对于page1,我有以下变量:

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