首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >更改简单参数时,MySql查询将中断。

更改简单参数时,MySql查询将中断。
EN

Stack Overflow用户
提问于 2018-06-24 10:53:10
回答 2查看 36关注 0票数 0

我在代码中更改了一个查询,因为我希望用户从下拉列表中选择一个特定的值,而不是免费的文本搜索。在这种情况下,我必须调整,如果用户没有选择一个特定的值,我仍然想要所有相关的结果。更改后,查询将返回“无结果”。我很困惑,因为我曾多次使用类似的查询。下面是工作的原始查询:

代码语言:javascript
复制
SELECT `companies`.`name`, `companies`.`website`,`country`.`country_name`, 
        `company_sector`.`notes`, `sector`.`sector_name`, 
        FORMAT(`financials`.`revenues`,0), 
        FORMAT(`financials`.`ebitda`,0) 
FROM { oj `seta`.`company_sector` AS `company_sector` 
    RIGHT OUTER JOIN `seta`.`companies` AS `companies` ON `company_sector`.`company_id` = `companies`.`company_id` 
    LEFT OUTER JOIN `seta`.`country` AS `country` ON `country`.`country_id` = `companies`.`country_id` 
    LEFT OUTER JOIN `seta`.`financials` AS `financials` ON `financials`.`company_id` = `companies`.`company_id` 
    LEFT OUTER JOIN `seta`.`contacts` AS `contacts` ON `contacts`.`contact_id` = `companies`.`seta_id` 
    }, 
`seta`.`sector` AS `sector` 
WHERE 
      (
        (`company_sector`.`sector_id` = `sector`.`sector_id`)
      AND 
        (`companies`.`name` LIKE '%".$query_name."%')
      AND 
        (`company_sector`.`notes` LIKE '%".$query_product."%')
      AND 
        (`country`.`country_name` LIKE '%".$query_country."%')
      AND 
        (`sector`.`sector_name` LIKE '%".$query_sector."%')

虽然这是一个新的查询,但不起作用。如你所见,我只更改了最后两行。

代码语言:javascript
复制
SELECT `companies`.`name`, `companies`.`website`, `country`.`country_name`, 
        `company_sector`.`notes`, `sector`.`sector_name`, 
        FORMAT(`financials`.`revenues`,0), 
        FORMAT(`financials`.`ebitda`,0) 
FROM { oj `seta`.`company_sector` AS `company_sector` 
    RIGHT OUTER JOIN `seta`.`companies` AS `companies` ON `company_sector`.`company_id` = `companies`.`company_id` 
    LEFT OUTER JOIN `seta`.`country` AS `country` ON `country`.`country_id` = `companies`.`country_id` 
    LEFT OUTER JOIN `seta`.`financials` AS `financials` ON `financials`.`company_id` = `companies`.`company_id` 
    LEFT OUTER JOIN `seta`.`contacts` AS `contacts` ON `contacts`.`contact_id` = `companies`.`seta_id` }, `seta`.`sector` AS `sector` 
WHERE 
     ( 
      (`company_sector`.`sector_id` = `sector`.`sector_id`)
      AND 
      (`companies`.`name` LIKE '%".$query_name."%')
      AND 
      (`company_sector`.`notes` LIKE '%".$query_product."%')
      AND
       (
        (`company_sector`.`sector_id` = ".$query_sector.") 
        OR 
        (".$query_sector." IS NULL)
       )
      ) 
       ORDER BY `financials`.`revenues` ASC

你能帮忙吗?谢谢你问候托马索

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-24 11:05:09

中断对区段的查询,如果选中筛选器,则追加筛选值。参见下面的示例。

代码语言:javascript
复制
$query = "SELECT `companies`.`name`, `companies`.`website`, `country`.`country_name`, `company_sector`.`notes`, `sector`.`sector_name`, FORMAT(`financials`.`revenues`,0), FORMAT(`financials`.`ebitda`,0) FROM { oj `seta`.`company_sector` AS `company_sector` RIGHT OUTER JOIN `seta`.`companies` AS `companies` ON `company_sector`.`company_id` = `companies`.`company_id` LEFT OUTER JOIN `seta`.`country` AS `country` ON `country`.`country_id` = `companies`.`country_id` LEFT OUTER JOIN `seta`.`financials` AS `financials` ON `financials`.`company_id` = `companies`.`company_id` LEFT OUTER JOIN `seta`.`contacts` AS `contacts` ON `contacts`.`contact_id` = `companies`.`seta_id` }, `seta`.`sector` AS `sector` WHERE 
             ( 
              (`company_sector`.`sector_id` = `sector`.`sector_id`)
              AND 
              (`companies`.`name` LIKE '%".$query_name."%')
              AND 
              (`company_sector`.`notes` LIKE '%".$query_product."%')";

//check if filter is selected. 
if(!empty($query_sector)){
        $query .= " AND `company_sector`.`sector_id` = ".$query_sector; //append to main query.
}

$query .= " ORDER BY `financials`.`revenues` ASC";
票数 1
EN

Stack Overflow用户

发布于 2018-06-24 10:57:13

假设空字符串与以下行匹配IS NULL

代码语言:javascript
复制
(".$query_sector." IS NULL)

这将永远不会决定为真。

你的意思是:

代码语言:javascript
复制
(".$query_selector." = '')
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51009202

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档