【问题标题】:Data pagination with "saved" search带有“已保存”搜索的数据分页
【发布时间】:2011-02-12 09:01:14
【问题描述】:

我正在创建一个作为搜索结果的页面...

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

你们会怎么做?

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

--

更新: 问题不在于如何对“每页 20 个结果”之类的搜索结果进行分页...我需要从一条记录跳转到另一条记录,依次在同一个搜索结果中。

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

--

可能的解决方案 #1

使用结果 ID 创建一个数组,例如:

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

并将此数组存储在会话或带有令牌(SHA1、MD5 或 UUID)的 cookie 中,并将此令牌作为 URL 中的 GET 参数传递。

【问题讨论】:

  • 这似乎是一个 javascript 的东西。
  • 怎么样? JS这里没啥关系
  • from a saved search 表示。

标签: php mysql search cakephp pagination


【解决方案1】:

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

在普通的 PHP 中,我会使用 http_build_query() 函数,比如说,

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

至于分页代码,你可以在SO上找到近千个主题

【讨论】:

  • 你的意思是http_build_query()
  • 在会话中保存搜索字符串是一种选择。不过,这是一个糟糕的选择。
【解决方案2】:

使用查询限制和偏移量。例如,在第 1 页上,偏移量为 0,限制是您想要的结果数量。随着分页的进行,偏移量也在进行。例如,偏移量表示您希望从第 11 个结果开始检索确定数量的结果。
我从未使用过 CakePHP,但this article 似乎很好地解释了如何进行分页。

【讨论】:

  • 哦,我明白了。我想到的是:构建一个数组并用检索到的结果填充它。然后你只需要正常迭代它以获得下一个相关结果。我不知道如何在页面跳转之间存储数组。
  • @Jorge - 是的......我认为这是最好的解决方案......也许在会议中?饼干?还是最糟糕的……数据库? :S
  • 不是数据库,因为那样您就必须进行新的查询。那这个呢? api13.cakephp.org/class/cache#method-Cacheread (Alô gambiarra) :D
  • @Jorge - 看看我的“可能的解决方案 #1”并告诉我你的想法
  • @TiuTalk 问题是……如果您只存储 id,则必须在每个新页面上查询数据库。我认为获取一次并将整个结果集存储在缓存中更有效,因为您将根据需要获取和解析数据。 MemcacheEngine 类看起来是一个可行的解决方案:只查询一次并缓存结果。 api13.cakephp.org/class/memcache-engine
猜你喜欢
  • 2017-09-27
  • 2021-03-11
  • 2013-08-10
  • 1970-01-01
  • 1970-01-01
  • 2019-03-09
  • 1970-01-01
  • 1970-01-01
  • 2014-02-22
相关资源
最近更新 更多