Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PhP/MySQL在页面之间存储用户搜索,以便用户可以返回到页面_Php_Mysql_Search_Data Persistence - Fatal编程技术网

PhP/MySQL在页面之间存储用户搜索,以便用户可以返回到页面

PhP/MySQL在页面之间存储用户搜索,以便用户可以返回到页面,php,mysql,search,data-persistence,Php,Mysql,Search,Data Persistence,我正在编写一个php mysql应用程序。应用程序允许用户对数据库运行搜索。当搜索运行时,如果用户在检查它所带来的项目后单击“上一步”按钮返回到它,则会询问他们是否要重新发送查询(它使用post)。这将在数据库中重新运行搜索。使用get不会导致重新发布请求,但它仍然会再次运行搜索 是否有一种方法可以存储搜索并调用它,而不必在数据库中重新运行它? 这可以保存在数据库中,或者以某种方式保存在php中——可能是通过会话?这些搜索可能会产生大量数据,我觉得对于会话来说可能太多了 我可以想象的另一种方式是

我正在编写一个php mysql应用程序。应用程序允许用户对数据库运行搜索。当搜索运行时,如果用户在检查它所带来的项目后单击“上一步”按钮返回到它,则会询问他们是否要重新发送查询(它使用post)。这将在数据库中重新运行搜索。使用get不会导致重新发布请求,但它仍然会再次运行搜索

是否有一种方法可以存储搜索并调用它,而不必在数据库中重新运行它?

这可以保存在数据库中,或者以某种方式保存在php中——可能是通过会话?这些搜索可能会产生大量数据,我觉得对于会话来说可能太多了

我可以想象的另一种方式是将其存储在数据库中,存储在某种临时表中。使用我想要查询的列创建表,然后选择插入。然后从表中选择*。这似乎也是个坏主意。大量动态创建的临时表四处浮动

我知道这是可以做到的。保存的搜索是您在许多web应用程序中看到的东西。那么通常是如何做到的呢?

但是,我注意到您没有给出任何要缓存搜索结果的原因。“因为它更快,而且我读到它使我的应用程序更具可伸缩性,”这是通常的原因。这听起来像是过早的优化

我建议您构建应用程序并对其进行分析。这些“搜索”的成本有多高?为什么它们很昂贵?这是糟糕的模式设计吗?是不是索引很差?这是不是存储引擎的糟糕选择

你意识到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['search'][22]或数据库获取查询字段

至于保存结果,您可以依赖浏览器的缓存,也可以在会话或数据库中存储单个SERP。。。如果需要的话,在某个时候将旧的过期

创建一个结果表是很好的(并且会加快复杂搜索的分页),但是您可能会有数百万次的点击,所以使用缓存分页将是更通用的方法


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

这个问题可能也会让您感兴趣:我不知道MySQL有查询缓存。我正在自学php和mysql。很高兴知道,我会试一试,看看效果如何。很抱歉延迟接受,我花了一段时间来测试这个。