PhP/MySQL在页面之间存储用户搜索,以便用户可以返回到页面
我正在编写一个php mysql应用程序。应用程序允许用户对数据库运行搜索。当搜索运行时,如果用户在检查它所带来的项目后单击“上一步”按钮返回到它,则会询问他们是否要重新发送查询(它使用post)。这将在数据库中重新运行搜索。使用get不会导致重新发布请求,但它仍然会再次运行搜索 是否有一种方法可以存储搜索并调用它,而不必在数据库中重新运行它? 这可以保存在数据库中,或者以某种方式保存在php中——可能是通过会话?这些搜索可能会产生大量数据,我觉得对于会话来说可能太多了 我可以想象的另一种方式是将其存储在数据库中,存储在某种临时表中。使用我想要查询的列创建表,然后选择插入。然后从表中选择*。这似乎也是个坏主意。大量动态创建的临时表四处浮动 我知道这是可以做到的。保存的搜索是您在许多web应用程序中看到的东西。那么通常是如何做到的呢? 或 但是,我注意到您没有给出任何要缓存搜索结果的原因。“因为它更快,而且我读到它使我的应用程序更具可伸缩性,”这是通常的原因。这听起来像是过早的优化 我建议您构建应用程序并对其进行分析。这些“搜索”的成本有多高?为什么它们很昂贵?这是糟糕的模式设计吗?是不是索引很差?这是不是存储引擎的糟糕选择 你意识到MySQL有一个?在很多情况下,这可能就是你所需要的。尝试使用mysql客户端运行一个昂贵的“搜索”查询,记下时间,然后再次运行。请参阅?要修复“是否要重新提交”错误,您可以将请求存储在会话或数据库中,然后立即重定向到新页面以实际执行搜索:PhP/MySQL在页面之间存储用户搜索,以便用户可以返回到页面,php,mysql,search,data-persistence,Php,Mysql,Search,Data Persistence,我正在编写一个php mysql应用程序。应用程序允许用户对数据库运行搜索。当搜索运行时,如果用户在检查它所带来的项目后单击“上一步”按钮返回到它,则会询问他们是否要重新发送查询(它使用post)。这将在数据库中重新运行搜索。使用get不会导致重新发布请求,但它仍然会再次运行搜索 是否有一种方法可以存储搜索并调用它,而不必在数据库中重新运行它? 这可以保存在数据库中,或者以某种方式保存在php中——可能是通过会话?这些搜索可能会产生大量数据,我觉得对于会话来说可能太多了 我可以想象的另一种方式是
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。很高兴知道,我会试一试,看看效果如何。很抱歉延迟接受,我花了一段时间来测试这个。