过滤数据库结果而不运行其他查询

时间:2010-10-15 16:55:59

标签: database codeigniter filter

我正在将CodeIgniter用于分类广告网站。以下是我正在努力实现的具体示例:

在页面http://www.example.com/browse/Real-Estate上列出了所有房地产分类广告。我正在使用CI的分页类对结果进行分页。

在左侧栏中,显示了一组过滤器,这些过滤器对应于“Real Estate Classifieds”表中的每个db列。例如:

类型:房子,公寓 卧室:1,2,3,4 ...... 家具:是的,不 等

每次用户选择一个值时,都会运行一个查询,并使用Ajax更新结果。

但是,由于选择的值对应于初始查询中的附加“WHERE”子句,因此我想知道在没有重新运行的情况下过滤已有的结果的最佳方法查询。

2 个答案:

答案 0 :(得分:1)

您为什么反对运行其他查询?如果用户以没有过滤器的宽泛查询开始,则将其过滤掉意味着迭代结果集并对每一行执行过滤器检查。如果用户使用带过滤器的窄查询开始,则更改或删除过滤器无论如何都需要新的查询,并且添加过滤器需要迭代结果集。

如果我是你,我将构建一个适用于所有条件的过滤系统,将信息发送到服务器以构建查询,使用查询结果构建视图,并将HTML作为字符串返回给浏览器,您可以使用jQuery(或其他)将其插入结果框。这样做可以节省您最多的时间,允许您编写最少量的Javascript,并且,我认为,使您的应用程序看起来非常活泼(而不是使用Javascript迭代大型结果集)。

答案 1 :(得分:1)

基本上一开始你可以通过 -

带来所有结果
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