PHP SQL获取查询中的下一行(使用用户排序的结果)

时间:2011-02-07 23:40:56

标签: php sql mysql pagination

我带来了这个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

我输入了一个搜索值,只是按名称排序。我如何获得下一行等等?

3 个答案:

答案 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 ...