2011-03-20 88 views
2

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

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'); 

上显示该用户是在,没有特别把用户对页面的顶部(这将是一个容易得多的页面查询

+1

你能否详细说明只是一点点;我很接近理解这个答案,但很遥远:-( – Bojangles 2011-03-20 10:24:35

回答

0

样品表)

select username, id 
from 
    (select count(*) pos 
    from t_users 
    where username <= 'tobias') pos, 
    (select @row:[email protected]+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. 这将导致表扫描,充分行号的最后子查询
0
select count(*) 
FROM table 
WHERE [sort_by_field] < [actual_records_value] 
相关问题