我在代码中更改了一个查询,因为我希望用户从下拉列表中选择一个特定的值,而不是免费的文本搜索。在这种情况下,我必须调整,如果用户没有选择一个特定的值,我仍然想要所有相关的结果。更改后,查询将返回“无结果”。我很困惑,因为我曾多次使用类似的查询。下面是工作的原始查询:
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."%')虽然这是一个新的查询,但不起作用。如你所见,我只更改了最后两行。
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你能帮忙吗?谢谢你问候托马索
发布于 2018-06-24 11:05:09
中断对区段的查询,如果选中筛选器,则追加筛选值。参见下面的示例。
$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";发布于 2018-06-24 10:57:13
假设空字符串与以下行匹配IS NULL:
(".$query_sector." IS NULL)这将永远不会决定为真。
你的意思是:
(".$query_selector." = '')https://stackoverflow.com/questions/51009202
复制相似问题