2012-08-17 120 views
1

是否有MySQL腳本的任何解決方案來篩選具有特定間隔編號的結果。MySQL獲取間隔記錄

例如,如果我在數據庫中有100,000條記錄,並且只想獲取記錄號1000,2000,3000等(步驟1000)。

我可以得到整個結果做這在服務器端腳本(如100,000),並使用類似語法:

for($i=0, $i <= 100,000, $i = $i+1000) $filterResult[] = $record[$i]; 

然而,正如你可以看到,它會拉應力系統爲10萬條記錄將需要首先生成。

有沒有可以從數據庫腳本完成的解決方案?請注意,基於where子句中的某些條件,主鍵可能不會以1 - 100,000作爲結果開始。

您的幫助將非常感激。

回答

5

你可以這樣做:

SELECT * 
FROM tbl 
WHERE id % 1000 = 0 

但好像你不希望依賴於主鍵的值,而是一個結果集的行排名。

在這種情況下,你可以這樣做:

SELECT * 
FROM (
     SELECT  *, @rn:[email protected]+1 AS rank 
     FROM  tbl 
     CROSS JOIN (SELECT @rn:=0) var_init 
     WHERE  column1 = value AND 
        column2 = value 
     ) a 
WHERE a.rank % 1000 = 0 

哪裏column1 = value AND column2 = value只爲你是在爲你的查詢做什麼過濾的佔位符。

+0

謝謝Zene。但是,我不能依靠ID,因爲它不是以數字順序運行。例如前10條記錄可能有ID 199,425,122,111,...... – Chanon 2012-08-17 01:05:59

+0

@Chanon,我剛剛更新瞭解決方案。試試看。 – 2012-08-17 01:06:50

+0

@ZaneBien他們不是爲了順序嗎 - 通過添加一個訂單將導致文件排序後,您的第一個查詢將工作得很好。 – 2012-08-17 01:08:50