2012-02-05 48 views
1

下面的MySQL查詢返回與剛剛超過一百萬行的結果集:得到一個排在結果中的特定位置設置

SELECT postid 
FROM post p 
JOIN thread t ON p.threadid = t.threadid 
WHERE t.forumid = 10 
AND t.visible = 1 
AND p.visible = 1 
ORDER BY p.dateline desc 

這是很好的,但是我想在百萬分之一獲得的行位置。

所以,如果你還沒有已經猜到了,我怎麼會去這樣做

注意的問題:正在積極使用這個表,所以添加新行所有的時間。

編輯:這個問題並不完全清楚,查詢返回一個特定的論壇命令中的所有職位列表中的發佈日期desc,所以它不是那麼多結果集中的百萬職位,而是百萬職位在論壇上。

回答

4

您可以使用LIMIT子句,該子句接受從零開始的記錄索引,後跟記錄計數。

因此,對於在百萬行的一個記錄,你可以使用:

SELECT postid 
FROM post p 
JOIN thread t ON p.threadid = t.threadid 
WHERE t.forumid = 10 
AND t.visible = 1 
AND p.visible = 1 
ORDER BY p.dateline desc 
LIMIT 999999,1 
0
SELECT 
    postid 
    @curRow := @curRow + 1 AS row_number 
FROM post p 
JOIN (SELECT @curRow := 0) thread t ON p.threadid = t.threadid 
WHERE t.forumid = 10 
     AND t.visible = 1 
     AND p.visible = 1 
     AND row_number=1000000 
ORDER BY p.dateline desc 

所以,你必須得到的加入的百萬行。