Prev链接的问题

时间:2009-12-24 17:06:55

标签: php sql hyperlink

现在我有一些链接可以移动到上一页或下一页(或任何页码)。

ex. <--prev | 0 | 1 | 2 | 3 | next-->

我的问题是我只在页面上列出了“status ='A'”的项目。 (A表示活动...此页面上不再列出某些项目,删除时为'D',售罄时为'S'。

在SQL中我有... WHERE status='A' LIMIT $start_item, 20

我的问题在于上一个链接。我应该如何为它计算$ start_item?现在我正在使用当前ID(当前正在显示的页面上的第一个ID)并从中减去20(每页的项目数)。但是如果在当前ID和ID-20之间有任何不活动的项目,则单击Prev时显示的20个项目将会遇到当前ID。

2 个答案:

答案 0 :(得分:0)

您根本不需要知道物品的ID。在应用WHERE过滤后,LIMIT会对结果起作用,因此您需要知道的是 - 每页有多少项(本例中为20项)。然后LIMIT 0,20会给你第一页的项目; LIMIT 20,20 - 第二页等.LIMIT中的第一个数字不是id,而是结果集中的项目数。

答案 1 :(得分:0)

根据你的例子,看到页面编号从零开始有点奇怪。如果您使用以下内容:

start_item = (page_number - 1) * num_items_per_page

...您可以显示从1开始的页面。

  

我的问题在于上一个链接。我应该如何为它计算$ start_item?

根据事情的声音,您在请求中传递start_item。我只是使用页码,并根据要求计算。然后,PrevNext按钮所需的全部内容为current_page_number - 1current_page_number + 1。如果您决定允许用户选择每页的项目数量,那么它也会更加适应。

请记住,LIMIT有两个参数:

  • 起始行
  • 偏移

...所以你的限制将类似于这个伪代码:

LIMIT [(page_number - 1) * num_items_per_page], 20

  

如果在当前ID和ID-20之间有任何不活动的项目,则单击Prev时显示的20个项目将会遇到当前ID。

  1. 由于您拥有WHERE status = 'A',因此非查询项目(状态不是“A”的项目)永远将从查询中返回。那说......
  2. 项目状态将发生变化 - 可以按照您的说法删除或出售,这将导致数据发生变化。总是有可能当前项目位于页面的尖端,而另一项状态被更改可能导致当前项目现在位于上一页。