php mysql and pagination

php mysql and pagination

本文关键字:pagination and mysql php      更新时间:2023-09-26

我有一个从mysql数据库显示数据的问题。我的客户需要显示分页数据-即每页15行,不应该有任何滚动条,同时,显示的数据按类别排序,对于每个新类别,我必须在php文件中显示的表中添加2个新行,如:

r1-Category1
r2-item name | item data1 ...
db-item1
db-item2
...new item x
r1-Category2
r2-item name | item data1 ...
db-item 1
db-item 2

我试图从数据库中调用所有数据,为每个类别添加2个新行(如类别的名称和显示的项目),将它们放在一个数组中,然后计算所有行并划分为获得15个结果的页面,并继续使用javascript处理。这种方法的缺点是,这里有很多数据,并且几乎需要一分钟才能完成工作。

最好的解决方案-尽快显示IMO的数据是使用分页,但我需要定义一个限制。有一个问题——如果15个结果中的类别可以是不同的(有时是3个、4个或只有一个),我如何定义一个限制?因此,我试图找出有多少类别是在15个结果从数据库,然后使另一个调用数据库的限制=限制-2x(没有类别)…第一页还行,但后面几页就不明显了……例如:在15行的限制中有3个类别,所以我需要将限制更改为9…如果我将限制更改为9行,则只有2个类别…很复杂,但关键是,在我看来这行不通。

你知道怎么解决这个问题吗?

第一个解决方案对我的客户来说是不可接受的,而第二个解决方案在我看来是不可能的。但是他的观点是在编程中一切皆有可能

从数据库(LIMIT (start, count))中获取15个。记住起始索引,并用索引标记行。构建您的表,但每次遇到标题时,从要显示的行数中减去2。当您达到最大表高时,请记住显示的下一个项:这是下一页的起始索引。

向后走更棘手;为了做到这一点,您需要记住您来自的页面的起始索引(如果您不这样做,那么您必须获取所有行,直到您当前显示的行)。这种方法的另一个问题是,您不知道事先有多少页。

另一种选择是编写一个查询,为您提供每个类别的行数。如果有适当的索引,只获取这些数据不应该花费一分钟的时间,即使成本很高,也可以缓存结果。有了这些信息,您就可以使用完整的类别(只要类别的条目不超过13个)将数据分成最多15行的页面。您甚至可以缓存分页数据。这种方法的缺点是,您可能会有稍微过时的分页,所以当有很多插入和删除操作时,您可能偶尔会得到16或17行而不是15行。

另外,你需要教育你的客户一点。看起来不错是很好,但你也不想给人一种在有限的时间内什么都有可能的印象。