2011-03-20 63 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] 
相關問題