我想为我的网页执行分页。我正在使用的方法(我主要在互联网上找到)将在下面举例说明。
假设我有下表user
+----+------+----------+
| id | name | category |
+----+------+----------+
| 1 | a | 1 |
| 2 | b | 2 |
| 3 | c | 2 |
| 4 | d | 3 |
| 5 | e | 1 |
| 6 | f | 3 |
| 7 | g | 1 |
| 8 | h | 3 |
| 9 | i | 2 |
| 10 | j | 2 |
| 11 | k | 1 |
| 12 | l | 3 |
| 13 | m | 3 |
| 14 | n | 3 |
| 15 | o | 1 |
| 16 | p | 1 |
| 17 | q | 2 |
| 18 | r | 1 |
| 19 | s | 3 |
| 20 | t | 3 |
| 21 | u | 3 |
| 22 | v | 3 |
| 23 | w | 1 |
| 24 | x | 1 |
| 25 | y | 2 |
| 26 | z | 2 |
+----+------+----------+
我想显示有关每页有2个用户的类别3
用户的信息,我正在使用以下查询
select * from user where category=3 limit 0,2;
+----+------+----------+
| id | name | category |
+----+------+----------+
| 4 | d | 3 |
| 6 | f | 3 |
+----+------+----------+
以及接下来的两个
select * from user where category=3 limit 2,2;
+----+------+----------+
| id | name | category |
+----+------+----------+
| 8 | h | 3 |
| 12 | l | 3 |
+----+------+----------+
等等。
现在在实践中,我在一个表中有大约7000个元组。所以在速度方面有更好的方法来达到这个目的,或者就这个方法可能有的任何后备而言。
感谢。
答案 0 :(得分:0)
您不想获取比当前页面可以处理的值更多的值,所以是的,您基本上每页都会进行一次查询。其他一些解决方案(例如Rails will_paginate)将执行基本相同的查询。
现在,您可以在客户端构建一些逻辑以在那里进行分页 - 一次预取多个(或所有)页面并将它们存储在客户端。这样,分页在客户端完全处理,无需进一步查询。如果用户可能只看整个页面的一小部分,那就有点浪费了。
如果您的实际生产表中包含更多列,则只能选择相关列而不是*,或者可能添加某种顺序(用于排序)。
答案 1 :(得分:0)
我希望这会有所帮助,你必须用你的页码代替your_page_number,每页的记录代替你样本中的records_per_page:
select A.* from
(select @row := @row + 1 as Row_Number, User.* from User
join (select @row := 0) Row_Temp_View
where category = 3
) A
where row_number
between (your_page_number * records_per_page)-records_per_page+1
and your_page_number * records_per_page;
注意这将获取正确的记录,而您的样本将不会,这是因为您的示例将始终提取两条记录,这并非总是如此,假设您有你想赢得的3个用户在两个页面中显示,所以你的样本将在第一页显示第一个和第二个,它将在第二个页面显示第二个和第三个不正确,我的代码将显示第一个和第二个在第一页和第二页中,它只会显示第三页......
答案 2 :(得分:-1)
您可以使用Datatables。它的意思与您正在寻找的完全相同。我成功地使用它来分页超过一百万行,这是非常快的&易于实施。