我带来了这个question up previously,但我收到的答案只在某些情况下有效,但对大多数情况都没有。
我有一个显示产品列表的页面。我有5000多种产品,它们显示的页面具有排序和搜索功能。用户可以按升序或降序排序5-6列中的任何一列。他们可以按“强度”列排序,该列有许多重复值。甚至“名称”列也有重复的值。
由于这些排序控件,我可能会得到ID为5,2,8,4等的结果。我在会话中保存了查询变量,所以如果我编辑产品5,保存之后会将我带到产品2,保存后将我带到8然后4.我需要一个查询来获取当前项ID之后的下一行
我用来测试以获得结果的查询是:
SELECT * FROM products WHERE `active` = 1 AND `deleted` = 0 AND (`name` LIKE '%APO%' OR `din` LIKE '%APO%') ORDER BY `name` ASC, id ASC LIMIT 0,10
我输入了一个搜索值,只是按名称排序。我如何获得下一行等等?
答案 0 :(得分:1)
我决定在URL中的结果表中传递位置。我通过检索页码,将其乘以每页的结果数,然后向其添加递增变量来获得此结果。这样,上一个/下一个链接可以获取查询位置并从中添加/减去1。结合LIMIT声明,这似乎有效。必须在URL中传递变量是令人讨厌的,但至少它可以工作。
答案 1 :(得分:0)
我会从数据库中执行此操作。在会话中也保存一些查询ID的顺序?然后,您可以轻松浏览它们。如果该人去了该集合,或者您超出了存储数据集的限制,则重新发出完整查询并保存一组新结果。
答案 2 :(得分:0)
以下查询将返回第二个结果
SELECT * FROM products WHERE `active` = 1 AND `deleted` = 0 AND (`name` LIKE '%APO%' OR `din` LIKE '%APO%') ORDER BY `name` ASC, id ASC LIMIT 1,1
以下查询将返回第三个结果
SELECT * FROM products WHERE `active` = 1 AND `deleted` = 0 AND (`name` LIKE '%APO%' OR `din` LIKE '%APO%') ORDER BY `name` ASC, id ASC LIMIT 2,1
依旧......
或者你可以制作临时表。临时表与数据库连接会话绑定。
CREATE TEMPORARY TABLE list ...