Я изменил запрос в своем коде, потому что я хотел, чтобы пользователи выбирали конкретное значение из раскрывающегося списка, а не свободный текстовый поиск. В этом случае я должен приспособиться к тому, что, если пользователь не выбирает определенное значение, я все же хочу получить все соответствующие результаты. После изменения запрос возвращает "Нет результатов". Я очень озадачен, потому что много раз использовал подобный запрос. Вот исходный запрос, который работает:
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."%')
Хотя это новый запрос, который не работает. Как вы можете видеть, я изменил только последние 2 строки.
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
Не могли бы вы помочь? С уважением, Томмазо
Разбейте запрос на разделы и добавьте значения фильтра, если выбран фильтр. см. пример ниже.
$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";
Вы предполагаете, что пустая строка соответствует IS NULL
с этой строкой:
(".$query_sector." IS NULL)
Это никогда не решится на истину.
Что вы имеете в виду:
(".$query_selector." = '')
".$query_sector." IS NULL
это ваша проблема, попробуйте проверить ваши переменные через php, mysql может проверять только значения столбцов