首页 文章

优化搜索结果[PHP / MySQL]

提问于
浏览
0

我正在创建一组搜索窗格,允许用户在提交查询后调整其结果集 . 我们从结果中提取某些字段中常见的值并按照它们的受欢迎程度显示它们 - 您在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;
}

这样做有充分的理由吗?还是有更好的选择?也许临时表?任何想法非常感谢!

2 回答

  • 1

    我会继续重新查询数据库,将所有内容保持在一起并减少分页噩梦 .

    你是通过AJAX做到这一点的吗?

  • 1

    使用Memory Storage Engine是一个选项吗?

    如果您正在进行大量查询(我的意思是大),使用内存存储引擎可以节省时间 . (虽然会少量)

相关问题