【发布时间】:2017-02-22 14:32:14
【问题描述】:
一些背景
有问题的系统有大约一万条记录,允许用户通过“大量”不同搜索条件的数组进行浏览或搜索。然后将结果显示在分页表中,范围从几页到数据库中的每个结果。
如果用户进行了大量过滤并最终得到结果并单击任意记录,则她将被带到新视图/edit/{record_id},她可以在其中查看所述记录的所有详细信息。随时返回上一个搜索结果很容易,因为条件保留在搜索栏中,但是:
我正在努力实现的目标
如果用户要根据搜索结果进行大量更改,使用上一个和下一个按钮访问相邻记录而不返回结果会非常方便。
我已经能够使用ids 在基本级别上做到这一点
SELECT table.*, pn.p as previous_question, pn.n as next_question
from table,
(
SELECT id, lead(id) OVER w as n, lag(id) OVER w as p
FROM table
window w as (order by id $order)
) as pn
where table.id = $id
and pn.id = $id
这显然只适用于记录与数据库中的记录顺序相同的最简单情况。我想要的是让他们在每种情况的数据顺序中工作。不用说,对这些数据进行排序的方法几乎是无限的。
我一直在想什么
创建某种函数/工具,让我可以阻止搜索 SQL 并像上面一样再次执行它,仅使用搜索条件和偏移量而不是 ids
保存一个列表结果中所有记录的顺序,可以是$_SESSION,数据库也可以是别的地方,然后简单的遍历列表得到ids我需要。
手头的工具
PHP、PostgreSQL、JS/jQuery。
TL;DR
无论用户点击“下一步”多少次,我都希望能够在不返回搜索的情况下获得下一个搜索结果。
---------
任何意见将不胜感激。相关文章的链接、处理方法甚至整个shebang ;)。能够在不消耗所有服务器内存或过多的数据库访问的情况下解决这个问题也很好,尽管资源在这里并不是真正的问题。
【问题讨论】:
-
你为什么不像你建议的那样使用会话或cookie?这是一个很好的解决方案,并且会起作用。
-
嗯,这是一个选项。我只是不觉得它对于包含可能 50k 项的数组非常优雅。另一方面,我可能只是在想这个。这就是为什么我想要一些输入:)
-
分页通常是通过使用 sql LIMIT 命令的多个查询来完成的。
-
@jurgemaister 我不是说你应该保存结果数组!只是sql查询。只需保存不同的查询设置而不是结果!
-
您将在会话中存储一个较低和较高的索引(在您的情况下,我猜是一样的),下一个/上一个按钮只会增加/减少索引。然后,您的 SQL 将有一个 LIMIT lowerindex,upper index。您也可以轻松存储用户建立的整个 SQL 查询。我不建议将整个返回的数组存储在会话中,因为这意味着当您应该在 SQL 中进行数据处理时,您必须在 PHP 中进行数据处理。
标签: php postgresql pagination paging