2017-09-13 42 views
1

我們有運行這樣的查詢:MySQL的返回結果中的行數少設定除限制

select distinct(id) 
from TABLE 
where date_id >= :startDate 
and date_id <= :endDate 
limit :offset,5000 

的問題是 - 有時這個查詢從我可以告訴返回5000行,有時是4999。訣竅是,昨天,我可以得到一個特定的偏移量(125000),每次運行它時都會返回4999,但是今天,它現在已經回到5000.

任何想法爲什麼會發生這種情況?我讀過MySQL的限制就是這樣一個限制,它返回n行,但我想知道的是當MySQL做出這個決定時背後的實際機制。

感謝

+4

注意DISTINCT不是一個函數。 – Strawberry

+0

您確定有(或已)至少5000條記錄要退回嗎?此外,日期比較應該是對DATE字段,而不是DATETIME字段,因爲時間可能會把事情搞砸 –

+0

是的,我注意到這在偏移量125000,返回4999行。偏移130000還返回了4999行,並且此查詢的計數返回了325000行 – edeesis

回答

0

我們無法重現您的結果(有時4999 -V-大多5000)所有我可以提供的是一排不太符合標準時返回4999。請注意,第二個參數是最大值,所以如果沒有更多的行存在,它將停在最後一行,這意味着行數會少於返回的第二個參數。

MySQL文檔說:

LIMIT子句可以被用來限制的行數由SELECT語句返回 。 LIMIT取一個或兩個數字參數, 它必須都是非負整數常量...

...

有兩個參數,第一個參數指定的偏移量 第一行的迴歸,以及第二個指定要返回的最大行數 。的初始行的偏移量爲0(未1):

SELECT * FROM tbl LIMIT 5,10; # Retrieve rows 6-15 

https://dev.mysql.com/doc/refman/5.7/en/select.html