Покинул форум
Сообщений всего: 1
Дата рег-ции: Март 2018
Помог: 0 раз(а)
Здравствуйте, подскажите пожалуйста, как сделать расширенный поиск, т.е учитывать несколько полей при поиске, а не одно, как реализовано у меня сейчас
if($vvAuthor!=''){
$condition_of_Query .= "Author LIKE '%$vvAuthor%'";
} else
if($vvTitle!=''){
$condition_of_Query .= "Title LIKE '%$vvTitle%'";
}else
if($vvFac!=''){
$condition_of_Query .= "Fac LIKE '%$vvFac%'";
}else
if($vvKaf!=''){
$condition_of_Query .= "Kaf LIKE '%$vvKaf%'";
}else
if($vvUGSN!=''){
$condition_of_Query .= "UGSN LIKE '%$vvUGSN%'";
}
else
if($vvYear!=''){
$condition_of_Query .= "Year LIKE '%$vvYear%'";
}
В данном примере, у меня идет поиск по полю в отдельности, как объединить в общий запрос. Поля равнозначны, и поиск можно вести по любому полю
Спасибо
Vladimir Kheifets
Отправлено: 31 Марта, 2018 - 12:43:35
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
ЛеваХФактор пишет:
Здравствуйте, подскажите пожалуйста, как сделать расширенный поиск, т.е учитывать несколько полей при поиске, а не одно, как реализовано у меня сейчас
if($vvAuthor!=''){
$condition_of_Query .= "Author LIKE '%$vvAuthor%'";
} else
if($vvTitle!=''){
$condition_of_Query .= "Title LIKE '%$vvTitle%'";
}else
if($vvFac!=''){
$condition_of_Query .= "Fac LIKE '%$vvFac%'";
}else
if($vvKaf!=''){
$condition_of_Query .= "Kaf LIKE '%$vvKaf%'";
}else
if($vvUGSN!=''){
$condition_of_Query .= "UGSN LIKE '%$vvUGSN%'";
}
else
if($vvYear!=''){
$condition_of_Query .= "Year LIKE '%$vvYear%'";
}
В данном примере, у меня идет поиск по полю в отдельности, как объединить в общий запрос. Поля равнозначны, и поиск можно вести по любому полю
Спасибо
Добрый день!
Если нужно проверять, что один из заданных фильтров совпадает, то можно сделать так:
1. Прежде всего, чтобы не запутать автора темы хочу отметить, что моё решение и Ваше выдаёт один и тот же результат.
2. Моё решение отличается тем, что я не использую массив и join, а просто сливаю строки.
3. Сравнение эффектвности:
Результат: Author LIKE '%%' OR Title LIKE '%%' OR Fac LIKE '%%' OR Kaf LIKE '%%' OR UGSN LIKE '%%' OR Year LIKE '%%'
2.1934509277344E-5
-------------------------------- -------------------------------- -------------------------------- -----------
Author LIKE '%%' OR Title LIKE '%%' OR Fac LIKE '%%' OR Kaf LIKE '%%' OR UGSN LIKE '%%' OR Year LIKE '%%'
8.1062316894531E-6
Вывод: Ваше решение работает а четыре раза медленне моего. В даном случае это не принципиально, но может плохо работать на больших объёмах данных.
Удачи!
Мелкий
Отправлено: 01 Апреля, 2018 - 10:34:04
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Vladimir Kheifets пишет:
Вывод:
Ваше решение работает а четыре раза медленне моего
Внимательнее надо результаты сравнивать.
Если не придираться к самому измерению - то разница в 2,5 раза. Внимание на порядок величин.
Если придираться к измерению - единичное измерение будет сильно плавать. Необходимо повторять на значительном числе итераций.
И по существу - оба времени генерации SQL не имеют значения на фоне времени выполнения этого запроса, который в большинстве случаев даст гарантированный seqscan всей таблицы.
----- PostgreSQL DBA
Vladimir Kheifets
Отправлено: 01 Апреля, 2018 - 11:34:19
Частый посетитель
Покинул форум
Сообщений всего: 879
Дата рег-ции: Март 2017 Откуда: Германия, Бавария
Помог: 37 раз(а)
Мелкий пишет:
Vladimir Kheifets пишет:
Вывод:
Ваше решение работает а четыре раза медленне моего
Внимательнее надо результаты сравнивать.
Если не придираться к самому измерению - то разница в 2,5 раза. Внимание на порядок величин.
Если придираться к измерению - единичное измерение будет сильно плавать. Необходимо повторять на значительном числе итераций.
И по существу - оба времени генерации SQL не имеют значения на фоне времени выполнения этого запроса, который в большинстве случаев даст гарантированный seqscan всей таблицы.
Согласен с Вами. Невнимательно сравнил резудьтат и измерение будет сильно плавать, но вывод мой Вы процетировали не полностью:
Vladimir Kheifets пишет:
...В даном случае это не принципиально, но может плохо работать на больших объёмах данных.
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.