我正在创建一组搜索 Pane ,允许用户在提交查询后调整其结果集。我们从结果中提取某些字段中常见的值,并按照受欢迎程度的顺序显示它们 - 你们都在 eBay 上见过这种事情。因此,如果结果中的很多行是在 2009 年创建的,我们将能够单击“2009”并仅查看该年创建的行。
您认为应用这些过滤器的最有效方法是什么?我的工作解决方案是丢弃结果中与额外参数不匹配的条目,例如:
while($row = mysql_fetch_assoc($query)) {
foreach($_GET as $key => $val) {
if($val !== $row[$key]) {
continue 2;
}
}
// Output...
}
希望此方法只在生效时查询数据库一次,因为添加过滤器不会更改查询 - MySQL 可以缓存并重用一个数据集。缺点是它使分页有点令人头疼。
明显的替代方案是在初始查询中构建任何附加条件,例如:
$sql = "SELECT * FROM tbl MATCH (title, description) AGAINST ('$search_term')";
foreach($_GET as $key => $var) {
$sql .= " AND ".$key." = ".$var;
}
有充分的理由这样做吗?或者还有更好的选择吗?也许是临时表?非常感谢任何想法!
最佳答案
我会继续重新查询数据库,将所有内容放在一起并减少分页噩梦。
您是通过 AJAX 执行此操作吗?
关于php - 细化搜索结果 [PHP/MySQL],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2474566/