我正在创建一组搜索窗格,允许用户在提交查询后调整其结果集。我们从结果中提取某些字段中常见的值并按照它们的受欢迎程度显示它们 - 您在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;
}
有充分的理由这样做吗?还是有更好的选择?也许临时表?任何想法都非常感激!
答案 0 :(得分:1)
我会继续重新查询数据库,将所有内容保持在一起并减少分页噩梦。
你是通过AJAX做的吗?
答案 1 :(得分:1)
使用Memory Storage Engine选项吗?
如果您正在进行大量查询(我的意思是大),使用内存存储引擎可以节省时间。 (虽然会少量)