我正在写的PHP-MySQL的应用。该应用程序允许用户对数据库运行搜索。当搜索运行时,如果在后面用户点击按钮来检查由它提出了一个项目后,回去吧,他们问他们是否想重新发送查询(它使用POST)。这将重新运行在数据库中进行搜索。使用GET不会导致请求重新发布 - 但它仍然会再次搜索

有存储搜索和调出,用出在数据库中重新运行它呢?

这可以在数据库中保存,或以某种方式在php - 可能与会话?可以有很多的数据来这些搜索出来,我觉得这可能是太多的会话。

另一种方法我所能想象到其存储在数据库中,在某些类型的临时表。创建与我打算查询,然后选择到插入的列的表。然后从表中选择*。这也似乎有点像一个坏主意。很多动态创建临时表漂浮的。

我知道这是可以做到。保存的搜索是事情,你看到许多Web应用程序。那么它是如何做一般?

有帮助吗?

解决方案

分布式缓存

APC

不过,我注意到,你没有给予任何理由的为什么的要缓存搜索结果。 “因为它的速度更快,而且我读,它使我的应用更具扩展性,”是通常的原因。这种气味像过早优化。

我建议你建立你的应用程序和配置文件了。如何昂贵的是这些“搜索”? 为什么的是他们昂贵吗?它是架构设计不佳?它是索引做得很差?它是存储引擎的选择不当?

您知不知道MySQL有一个查询缓存,对不对?在许多情况下,这可能是你所需要的。试试运行你的昂贵的“搜索”使用mysql客户端查询之一,并记下时间,然后再运行它。见

其他提示

修复“你想重新提交”的错误,你可以存储在会话或数据库请求,然后立即重定向到一个新的页面,以实际执行搜索:

search.php?searchId=22

if (isset($_GET['searchId'])) {
  $search = $_SESSION['search'][$_GET['searchId'];
  // do search
} elseif (isset($_POST['search'])) {
  $_SESSION['search'][] = $_POST;
  header('Location: search.php?searchId=' . (count($_SESSION['search']) - 1);
}

然后,可以抓住从$ _SESSION查询字段[ '搜索'] [22]或分贝...

在其中保存结果,你可以依靠浏览器的缓存,也可以根据需要单独的养老金计划在会话中存储或DB ......在某些时候到期了旧的......

创建结果表是好的(并会加快对复杂的搜索分页),但你可能有数百万人在那里命中的,所以用高速缓存的分页会更普遍的方式。

如果用户想要返回到搜索几天或几周后,你可以重新运行与保存的查询字段搜索。

scroll top