Спасибо за ответ)
Ниже я постарался поподробнее описать мою реализацию обработки значений из множественной фильтрации.Код рабочий.
Но все же интересно какими алгоритмами вы пользуетесь для подобных задач,(конечно не код нужен и просто информация,может быть паттерн есть)
Сообщение от laimas
|
Вам нужно выбрать записи согласно условиям, при этом выборка будет по одному полю в SQL таблице, если судить по условиям, так? Какую структуру данных от сервера вы ожидаете?
.
|
В фильтре помимо дат(где действительно все просто,так как данные получаем использую mysql функции) есть уже более сложные запросы исходя переданных параметров.
Если выбраны пункты:
1-Локация 2-Категория 3-Дата 4-популярные,то соответственно на сервер попадает 4 параметра.Так как в фильтре -Дата есть несколько вариантов выборки(день,неделя и т.п),то получается что на клиенте и сервере это должно быть все обработано и получается оочень большой код проверок
По поводу структуру данных от сервера - здесь все просто:массив данных переводим в json и на клиенте разбираем
json
project_all
Object { id="20", user_id="31", name="colors", ещё...}
id "20"
user_id "31"
name "colors"
ava "/uploads/31/temp/080116_546.png"
date "2016-01-08"
nickname "test1"
category [Object { name="Фотография"}]
name "Фотография"
likes "0"
Сообщение от laimas
|
Но у вас странная логика в коде. По щелчку по некому элементу project_sort_info_click проверяется то, чего в принципе еще нет на клиенте, так как В самом конце ,после всех проверок отправляем на сервер верный результат. Во-первых что за верный результат, результат чего? Во-вторых и получаем ответ от сервера или ошибку - и что же он должен отдать судя по логике, верно ли проверил клиент?
.
|
Если произошел тригер на элементе $('.project_sort_info_click'),значит какие то данные точно уже есть и мы их ищем)
Например если выбрана
дата -неделя и локация -Москва,то сначало данные записываются в определенные теги Например
$('.project_time') //-для даты
а уже потом происходит триггер на функцию обработчик.А функция уже ищет эти данные
$('.project_sort_info_click').click(function(){/*эта функция вызывается когда произошел выбор значения(или значений) из фильтра*/
var req_rez={};
var error;
var data_type_rez=$('.project_time').attr('datetype');
var project_date=$('.project_time').text();/* это и есть данные для фильтра по дате, которые проверяет функция.Аналогично с другими вариантами */
/*здесь выводим результата если выбрана только дата*/
else if(project_date !='' && collection == '' && project_date ==''){
switch(data_type_rez){ //это
case "calendar_date":
error='нет проектов за выбранную дату';
req_rez={date:calendar};
break;
case "day":
error='нет активных проектов за текущий день';
req_rez={get_thisdate:'ok'};
break;
}
/****тут далее подобный код с различными вариантами
/*** и так все возможные комбинации*//
$.getJSON(get_all_project_url,req_rez,function(data){
getprog_json(data,error);
}
По поводу верного результата и ошибок.
req_rez
Пример
case "day":
error='нет активных проектов за текущий день';
req_rez={get_thisdate:'ok'};
break;
Пример простой выборки если выбран фильтр по дате-
за 1день,то на сервер кидаем параметр req_rez={get_thisdate:'ok'};На сервере смотри если пришел get_thisdate,значит ищем только за 1 день.Если же более сложный запром например фильтр по дате-
за 1день локация -москва
то код такой
error='нет активных проектов за текущий день в выбранном городе';
req_rez={get_thisdate_and_loc:'ok',city:'location'};
Если на сервере пришел параметр get_thisdate_and_loc значит я должен прочитать город из параметра
city И выбрать за 1 день..
А если нет данных то я вывожу на клиенте перемeнную
error