繁体   English   中英

php mysql 和分页

[英]php mysql and pagination

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

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 个新行(例如类别名称和显示项目的 th),将它们放入一个数组中,然后计算所有行并划分以获得 15 个页面结果,并继续使用 javascript 处理。 这种方法的缺点是,这里有很多数据,完成工作需要将近一分钟。

最好的解决方案 - 让数据尽快显示 IMO 是使用分页,但我需要定义一个限制.. 还有一个问题 - 如果 15 个结果中的类别可能不同(有时是 3 个, 4个还是一个)? 因此,我试图找出数据库的 15 个结果中有多少个类别,然后使用 limit = limit-2x(no of categories) 再次调用数据库......第一页工作正常,但下一页没有,很明显...例如:在15行的限制中例如3个类别,所以我需要将限制更改为9...如果我将限制更改为9行,则只有2个类别...非常复杂,但是关键是,从我的角度来看,这行不通。

你知道如何解决这个问题吗?

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

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

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

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

在旁注中,您需要对您的客户进行一些教育。 看起来不错很好,但你不想给人一种印象,在有限的时间内任何事情都是可能的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM