Фильтрация результатов базы данных без выполнения дополнительного запроса - PullRequest
3 голосов
/ 15 октября 2010

Я использую CodeIgniter для сайта объявлений. Вот конкретный пример того, чего я пытаюсь достичь:

На странице http://www.example.com/browse/Real-Estate перечислены все объявления о недвижимости. Я использую класс пагинации CI, чтобы разбить результаты на страницы.

На левой панели показан набор фильтров, которые соответствуют каждому столбцу БД в таблице «Объявления о недвижимости». Например:

Тип: Дом, Квартира Спальни: 1,2,3,4 ... С мебелью: да, нет и т.д.

Каждый раз, когда пользователь выбирает значение, выполняется запрос, и результаты обновляются с помощью Ajax.

Однако, поскольку выбор значения соответствует дополнительному предложению «WHERE» в начальном запросе, я подумал, что будет лучшим способом отфильтровать уже имеющиеся результаты без повторного запуска запрос.

Ответы [ 2 ]

1 голос
/ 16 октября 2010

В начале вы можете получить все результаты с помощью -

select * from TABLE

Затем, когда пользователь выбирает какие-либо конкретные критерии, вы можете использовать ajax для публикации этих критериев.

Ajax будет вызывать функцию контроллера -

function update_criteria(){
//Here you can call an another function say aply_criteria as follows.

array_walk('your actual result array','apply_criteria');

//finally parse the html with new filtered result throuh ajax.

 echo $this->parser->parse('view_name','data array',TRUE);

//catch the above html in the sucess callback function of ajax and replace it in the 
//previous html page.

Note :- the parser i have used above is an library in an codigniter so make sure you load it before using.

}

function apply_criteria(){

//Actual logic to unset the specific key value pair 
//(which does not satisfy the  criteria depending on the post data) from array.

}

документация array_walk - http://www.php.net/manual/en/function.array-walk.php

1 голос
/ 15 октября 2010

Почему вы против запуска дополнительного запроса? Если пользователь начинает с широкого запроса без фильтров, его фильтрация будет означать итерацию по набору результатов и выполнение проверок фильтров для каждой строки. Если пользователь начинает с узкого запроса с фильтрами, для изменения или удаления фильтров в любом случае потребуется новый запрос, а для добавления фильтров потребуется итерация по набору результатов.

На вашем месте я бы создал систему фильтров, которая работает в любых условиях, отправляет информацию на сервер, который будет встроен в запрос, создает представление с результатами запроса и возвращает HTML в виде строки для браузер, в котором вы можете использовать jQuery (или любой другой), чтобы вставить его в окно результатов. Это сэкономит вам больше всего времени, позволит вам написать наименьшее количество Javascript и, как мне кажется, сделает ваше приложение довольно быстрым (в отличие от использования Javascript для перебора больших наборов результатов).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...