2015-01-10 63 views
0

當我執行準備的語句:限制不會在日期時間比較工作

select SQL_CALC_FOUND_ROWS * from entries where (START_DATE >= ?) limit 300, 400 

其中START_DATEdatetime型,我得到相同的結果,如果我跑

select SQL_CALC_FOUND_ROWS * from entries where (START_DATE >= ?) limit 0, 400 

這意味着我在第一個查詢中顯示了400個結果,而不是100個!這是爲什麼?

額外的信息:

我使用SQL_CALC_FOUND_ROWS因爲我再執行查詢select FOUND_ROWS(),因爲我需要的總成績才能申請我的分頁功能,計數,以每頁顯示100個條目。像上面這樣的一個查詢返回大約35k總結果(350頁)。

對於同一表中的其他查詢,這不是真的。例如,查詢:

select SQL_CALC_FOUND_ROWS * from entries where (NATIONALITY = ?) limit 100, 200 

成功返回僅100個結果。其他列也是如此。只有類型datetime似乎有問題。

+0

你能提供一個sqlfiddle,所以我們可以重現結果? – user4035

+2

它必須是「極限300,100」。它是'LIMIT [OFFSET,] NUMBER' – zerkms

回答

1

我的看法 - 你在混淆你的想法並誤解了LIMIT語法思想。

根據文檔:

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

因爲@zerkms注意到評論:

LIMIT [OFFSET, ] NUMBER 

,這意味着你的情況:

limit 300, 400 

必須返回後在馬克斯400行300 :-)

,如果你想知道爲什麼

select SQL_CALC_FOUND_ROWS * from entries where (NATIONALITY = ?) limit 100, 200 

成功返回僅100個結果。

我唯一的猜測是沒有任何限制你的SQL結果僅包含200行(where (NATIONALITY = ?)

所以沒有魔法,但是從你的問題像你期待的是LIMIT 100,200對你意味着什麼「迴歸我行100行和200行之間的結果「 - 但它不是如何LIMIT工作