优化搜索结果[PHP/MySQL]

优化搜索结果[PHP/MySQL],php,mysql,search,Php,Mysql,Search,我正在创建一组搜索窗格,允许用户在提交查询后调整其结果集。我们从结果中提取某些字段中常见的值,并按受欢迎程度显示它们——你们都在易趣上见过这种情况。因此,如果我们的结果中有很多行是在2009年创建的,那么我们将能够单击“2009”,只看到在该年创建的行 您认为应用这些过滤器最有效的方法是什么?我的工作解决方案是丢弃结果中与额外参数不匹配的条目,如: while($row = mysql_fetch_assoc($query)) { foreach($_GET as $key =>

我正在创建一组搜索窗格,允许用户在提交查询后调整其结果集。我们从结果中提取某些字段中常见的值,并按受欢迎程度显示它们——你们都在易趣上见过这种情况。因此,如果我们的结果中有很多行是在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实现这一点的吗?

是否使用了一个选项


如果您正在执行大量查询(我指的是大型查询),那么使用内存存储引擎可以节省时间。(虽然数量很小)

我使用的是一个类似的系统,所有的条件都会进入第一个查询。。。i、 e.任何不是初始查询一部分的过滤器都在同一段代码中,并在动态构建查询时得到处理(或未处理)。正如你所说的,这使分页更容易,并使事情保持在一个地方。谢谢汤姆!如果是直播的话,我很想看一看……谢谢你的回复。理想情况下,我更喜欢使用AJAX的系统,但目前它需要页面刷新。有趣的建议。在像我这样的小规模行动中,可能杀伤力过大,但它可以奏效。谢谢