mysql分页显示一个页面中的特定行
问题描述:
现在我有一个关于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');
上显示该用户是在,没有特别把用户对页面的顶部(这将是一个容易得多的页面查询
答
样品表)
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);
注:
- 这里的页面大小是4,数字3是从页面大小取1的结果
- 刚刚登录的用户的用户名是'tobias',它用在第一个子查询中
- 那里最好是沿ORDER BY子句中的索引(在这种情况下,在用户名)
- 这将导致表扫描,充分行号的最后子查询
答
select count(*)
FROM table
WHERE [sort_by_field] < [actual_records_value]
你能否详细说明只是一点点;我很接近理解这个答案,但很遥远:-( – Bojangles 2011-03-20 10:24:35