natalina
5.03.2014 - 11:45
Доброго времени суток! Столкнулась с такой проблемой: необходимо организовать поиск по БД по нескольким полям, которые выбирает пользователь, то есть заранее мне неизвестно, что именно он выберет. Помогите пожалуйста советом с логикой, как обычно такое реализуют.
AllesKlar
5.03.2014 - 11:50
Цитата |
которые выбирает пользователь |
Ты же сама даешь варианты выбора, следовательно, тебе известно, какие фильтры могут быть выбраны, и какие поля для этих фильтров сопоставляются в базе.
А дальше смотришь, что выбрал пользователь и динамически (в цикле или простым перебором условий, если полей не много) создаешь условие 'WHERE ' для sql-запроса
_____________
[продано копирайтерам]
TranceIT
5.03.2014 - 11:52
SELECT ... FROM ... WHERE row1=1 AND row2=2 AND row3=3 ...
_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать. Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!
natalina
5.03.2014 - 11:58
Цитата (TranceIT @ 5.03.2014 - 11:52) |
SELECT ... FROM ... WHERE row1=1 AND row2=2 AND row3=3 ... |
Спасибо, но если бы всё было так просто... Не обязательно, что пользователь выберет обязательно все поля и такой запрос тогда вообще ничего не вернёт.
TranceIT
5.03.2014 - 12:00
Определите поля, которые пользователь заполнил и в зависимости от этого делайте запрос.
_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать. Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!
natalina, существует обычный и полнотекстовый поиск, какой применять в конкретном случае зависит от архитектуры БД и от критериев и логики поиска.
Вы задали слишком обобщенный вопрос, чтобы получить не него конкретный ответ.
Ну и:
Цитата |
то есть заранее мне неизвестно, что именно он выберет |
так не бывает, программист на то и программист, чтобы просчитать все возможные варианты и возможно сгруппировать их немного унифицировав.
_____________
Стимулятор ~yoomoney - 41001303250491
TranceIT
5.03.2014 - 12:43
natalinaСобственно да. Вы уже как минимум ожидаете критерии поиска. Остается только разделить данные на части и составить соотношение и\или между ними. Отсюда и строится логика.
_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать. Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!
natalina
5.03.2014 - 12:59
Спасибо всем! В общем получается примерно так
$query ='SELECT * FROM table_name WHERE ';
$and = '';
foreach ($_POST as $key => $value) {
if(!empty($value)){
$query.= $and.$key.' = '.$value;
$and = ' AND ';
}
}
Ну там уже буду смотреть по логике, возможно надо будет OR. И возможно для некоторых параметров LIKE
TranceIT
5.03.2014 - 13:08
natalinaДвигаетесь в правильном направлении.
_____________
Безвозмездно помогаю только тем, кто сам пытается что-то сделать. Остальным за WMR
Даже если там 10 строк кода!
Даже если мне это ничего не стоит!
Даже если вы нуб!
Цитата |
В общем получается примерно так |
это настолько примерно, что даже теорией назвать нельзя, все гораздо сложнее
_____________
Стимулятор ~yoomoney - 41001303250491
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.