【问题标题】:mysql pagination to display a page with a specific row in itmysql分页显示其中包含特定行的页面
【发布时间】:2012-02-17 10:09:05
【问题描述】:

现在我有一个关于 mysql 分页的问题。 一个用户的记录与许多其他用户的记录一起显示在一个表上。并且表格被排序/分页。 现在我需要在用户登录后直接显示包含用户行的页面。我怎样才能做到这一点? 一个简单的想法是首先找出用户的rownum,然后相应地进行分页,但我想知道是否有更好的方法来做到这一点。 谢谢。

【问题讨论】:

  • 你能详细说明一下吗?我很接近理解这个答案,但还很遥远:-(

标签: php mysql pagination


【解决方案1】:

供讨论的示例表

create table t_users (id int auto_increment primary key, username varchar(100));
insert t_users(username) values
('jim'),('bob'),('john'),('tim'),('tom'),
('mary'),('elise'),('karl'),('karla'),('bob'),
('jack'),('jacky'),('jon'),('tobias'),('peter');

显示用户所在页面的查询,而不是专门将用户放在页面顶部(这会容易得多)

select username, id
from
  (select count(*) pos
   from t_users
   where username <= 'tobias') pos,
  (select @row:=@row+1 row, u.*
   from (select @row:=0) initvars, t_users u
   order by u.username, u.id) numbered
where floor((numbered.row + 3)/4) = floor((pos.pos+3)/4);

注意事项:

  1. 这里的页面大小是4,数字3是页面大小减去1的结果
  2. 刚刚登录的用户的用户名是'tobias',在第一个子查询中使用
  3. ORDER BY 子句最好有一个索引(在这种情况下是用户名)
  4. 这将导致表扫描对最后一个子查询进行完全行号

【讨论】:

    【解决方案2】:
    select count(*) 
    FROM table 
    WHERE [sort_by_field] < [actual_records_value]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-17
      • 1970-01-01
      • 2014-03-17
      • 2021-03-14
      • 1970-01-01
      相关资源
      最近更新 更多