Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/248.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 数据分页时使用“;“保存”;搜索_Php_Mysql_Search_Cakephp_Pagination - Fatal编程技术网

Php 数据分页时使用“;“保存”;搜索

Php 数据分页时使用“;“保存”;搜索,php,mysql,search,cakephp,pagination,Php,Mysql,Search,Cakephp,Pagination,我正在创建一个搜索结果页面 当您查看其中一个结果时,我需要在页面底部插入“下一个结果”和“上一个结果”链接,就像分页一样。。。但从[我认为]保存的搜索,对吗 你们这些人会怎么做 Obs.:我将使用CakePHP(PHP)和MySQL -- 更新: 问题不在于如何分页搜索结果,比如“每页20个结果”。。。我需要从一个记录跳到另一个记录,依次在同一个搜索结果中 假设我在搜索中找到了记录3、5、8和9。。。然后我点击查看#5记录,我可以点击“下一个结果”链接跳转到#8记录 -- 可能的解决方案#1 创

我正在创建一个搜索结果页面

当您查看其中一个结果时,我需要在页面底部插入“下一个结果”和“上一个结果”链接,就像分页一样。。。但从[我认为]保存的搜索,对吗

你们这些人会怎么做

Obs.:我将使用CakePHP(PHP)和MySQL

--

更新: 问题不在于如何分页搜索结果,比如“每页20个结果”。。。我需要从一个记录跳到另一个记录,依次在同一个搜索结果中

假设我在搜索中找到了记录3、5、8和9。。。然后我点击查看#5记录,我可以点击“下一个结果”链接跳转到#8记录

--

可能的解决方案#1

创建一个数组,其结果ID如下:

$results = array(3, 5, 8, 9);

并使用令牌(SHA1、MD5或UUID)将此数组存储在会话或Cookie中,并将此令牌作为GET param传递到URL中。

我不知道cake的情况,但您所要做的就是对搜索表单使用GET方法,并在URL中保留查询字符串值

在普通PHP中,我会使用
http\u build\u query()
函数

if (isset($_GET['page'])) unset($_GET['page']);
$qs=http_build_query_string($_GET);
$url="?$qs&page=$page";

至于分页代码,使用查询限制和偏移量,您可以在这里找到近千个主题。例如,在第1页上,偏移量为0,限制为您想要的结果量。随着分页的进行,偏移量也会随之增加。例如,偏移量表示要从第11个结果开始检索已确定数量的结果。

我从未使用过CakePHP,但似乎很好地解释了如何进行分页。

这似乎是一个javascript的东西。这是怎么回事?JS在这里无事可做。
从保存的搜索中
意味着。你是说
http\u build\u query()
?在会话中保存搜索字符串是一个选项。不过这是个糟糕的选择。哦,我明白了。我想到的是:构建一个数组并用检索到的结果填充它。然后,您只需要正常地对其进行迭代,以获得下一个相关结果。我不知道如何在页面跳转之间存储数组。@Jorge-是的。。。这是我认为最好的解决方案。。。也许在会议上?饼干?或者最坏的。。。数据库?:SNot数据库,因为这样您就必须进行新的查询。这个怎么样?(冈比亚):D@Jorge-看看我的“可能的解决方案1”,告诉我你的想法think@TiuTalk问题是…如果你只存储ID,你必须在每个新页面上查询数据库。我认为只提取一次并将整个结果集存储在缓存中更有效,因为您将根据需要获取和解析数据。MemcacheEngine类看起来是一个可行的解决方案:只查询一次并缓存结果。