У меня всего 5 полей в поиске, но два (страницы и записанные_годы) имеют значения от-до. И значение для обоих будет выбрано с помощью тега option.
Теперь все работает нормально, но если кто-то просто введет значение «От» или «Кому» и оставит другое поле пустым, как его можно найти?
На страницах минимальное значение равно «1», а максимальное — «99».
В год минимальное значение равно «1990», а максимальное значение равно «2017»
Посмотрите код ниже, который я сейчас использую, и он покажет мне полный результат, в то время как нужно искать между двумя числами.
PHP & SQL для обоих полей
<?php
if(empty($_GET['search'])){
$search_keywords=$_SESSION['academic_keyword']=$_GET['academic_keyword'];
if(isset($_GET['page_from']) && $_GET['page_from']!='From'){
$search_page_from=$_GET['page_from'];
}
else{
$search_page_from_null='1';
$search_page_from = '1';
}
if(isset($_GET['page_to']) && $_GET['page_to']!='To'){
$search_page_to=$_GET['page_to'];
}
else{
$search_page_to_null='99';
$search_page_to = '99';
}
if(isset($_GET['written_year_from']) && $_GET['written_year_from']!='From'){
$search_written_year_from=$_GET['written_year_from'];
}
else{
$search_written_year_from_null='2017';
$search_written_year_from = '2017';
}
if(isset($_GET['written_year_to']) && $_GET['written_year_to']!='To'){
$search_written_year_to=$_GET['written_year_to'];
}
else{
$search_written_year_to_null='1990';
$search_written_year_to = '1990';
}
$search_price_to=$_GET['price_to'];
$search_work_id=$_GET['work_id'];
$current_year = date("Y");
if($search_page_from!='From' && $search_page_to=='99'){
$get_products="select *, LOCATE('$search_keywords',keywords3) AS keyword from academic_work where
(title like '%$search_keywords%' OR short_description like '%$search_keywords%' OR long_description like '%$search_keywords%') OR
(pages BETWEEN '$search_page_from' AND '$search_page_to') OR
(price BETWEEN '1' AND '$search_price_to') OR
(YEAR(written_year) BETWEEN '$search_written_year_from' AND '$search_written_year_to') OR
(academic_work_id like '$search_work_id')
ORDER BY keyword ASC";
}
else if($search_page_from=='1' && $search_page_to!='To'){
$get_products="select *, LOCATE('$search_keywords',keywords3) AS keyword from academic_work where
(title like '%$search_keywords%' OR short_description like '%$search_keywords%' OR long_description like '%$search_keywords%') OR
(pages BETWEEN '$search_page_from' AND '$search_page_to') OR
(price BETWEEN '1' AND '$search_price_to') OR
(YEAR(written_year) BETWEEN '$search_written_year_from' AND '$search_written_year_to') OR
(academic_work_id like '$search_work_id')
ORDER BY keyword ASC";
}
else if($search_written_year_from!='From' && $search_written_year_to_null=='1990'){
$get_products="select *, LOCATE('$search_keywords',keywords3) AS keyword from academic_work where
(title like '%$search_keywords%' OR short_description like '%$search_keywords%' OR long_description like '%$search_keywords%') OR
(pages BETWEEN '$search_page_from' AND '$search_page_to') OR
(price BETWEEN '1' AND '$search_price_to') OR
(YEAR(written_year) BETWEEN '$search_written_year_from' AND '$search_written_year_to_null') OR
(academic_work_id like '$search_work_id')
ORDER BY keyword ASC";
}
else if($search_written_year_from_null=='2017' && $search_written_year_to!='To'){
$get_products="select *, LOCATE('$search_keywords',keywords3) AS keyword from academic_work where
(title like '%$search_keywords%' OR short_description like '%$search_keywords%' OR long_description like '%$search_keywords%') OR
(pages BETWEEN '$search_page_from' AND '$search_page_to') OR
(price BETWEEN '1' AND '$search_price_to') OR
(YEAR(written_year) BETWEEN '$search_written_year_from_null' AND '$search_written_year_to') OR
(academic_work_id like '$search_work_id')
ORDER BY keyword ASC";
}
Заранее спасибо 🙂
Там вы присваивали две разные переменные в условиях if else и в запросе SELECT вы правильно используете эти две переменные. Итак, моя точка зрения: если бы еще условие, любая из частей была бы выполнена так, чтобы из двух переменных была назначена любая из них, но вы используете эти две переменные в запросе SELECT.
Это вы должны исправить в зависимости от ваших потребностей.
Пример кода предложения.
if(isset($_GET['written_year_from']) && $_GET['written_year_from']!='From'){
$search_written_year_from=$_GET['written_year_from'];
}
else{
$search_written_year_from_null='1990';
$search_written_year_from = '1990'; // using this variable in page_from conditions
}
Повторите это для всех условий. Надеюсь, поможет.
Других решений пока нет …