我在显示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个新行(例如类别的名称和所显示项目的th ),将它们放入一个数组中,然后计算所有行的数量并将其划分为包含15个结果的页面,然后继续使用javascript进行处理。这种方法的缺点是,这里有大量数据,几乎需要一分钟才能完成工作。
最好的解决方案是使用分页,但我需要定义一个限制。还有一个问题--如果15个结果中的类别可以是不同的(有时是3个、4个或只有一个),我如何定义限制?因此,我试着从数据库中找出15个结果中有多少个类别,然后使用limit =limit-2x(类别数)再次调用数据库...对于第一页可以工作,但对于下一页就不是很明显了…例如:在15行的限制中,例如3个类别,所以我需要将限制更改为9 ...如果我将限制更改为9行,则只有2个类别...非常复杂,但重点是,从我的角度来看,这是行不通的。
你有办法解决这个问题吗?
第一个解决方案对我的客户来说是不可接受的,第二个解决方案在我看来是不可能的。但他的观点是,在编程中,一切都是可能的。
发布于 2011-07-21 15:29:16
从数据库中获取15个项目(LIMIT (start, count))。记住起始索引,并用索引标记您的行。构建您的表,但每次遇到标题时,从要显示的行数中减去2。当您达到最大表格高度时,请记住接下来要显示的项:这是下一页的起始索引。
后退更为棘手;您需要记住所在页面的起始索引才能做到这一点(如果不这样做,则必须获取所有行,直到当前正在显示的行)。这种方法的另一个问题是,您不会预先知道有多少页。
另一种方法是编写一个查询,为您提供每个类别的行数。如果您有适当的索引,那么只获取这些索引应该不会花费一整分钟的时间,而且即使代价很高,您也可以缓存结果。有了这些信息,您可以使用整个类别将数据分成最多15行的页面(假设没有超过13个条目的类别)。您甚至可以缓存分页数据。这种方法的缺点是您的分页可能有一点过时,因此当有大量的插入和删除操作时,您可能偶尔会得到16或17行而不是15行。
顺便说一句,你需要对你的客户进行一点教育。看起来很棒,但你不想给人一种在有限的时间内一切皆有可能的印象。
https://stackoverflow.com/questions/6772541
复制相似问题