我想一次獲取我的結果作爲'頁面';我希望頁碼是一個參數(在JDBC準備語句中)。請看下面的代碼片段使用LIMIT爲MySQL查詢中的結果分頁
SELECT * FROM thread t ORDER BY t.id LIMIT ((? - 1) * 20), 20
因此理想情況下,這將導致在頁1,LIMIT 0, 20
。
當我測試
SELECT * FROM thread t ORDER BY t.id LIMIT ((1 - 1) * 20), 20
我告訴我有一個語法錯誤。但我不明白它會是什麼 - 這只是一些簡單的數學。它告訴我的全部是
錯誤1064(42000):您的SQL語法錯誤;檢查 對應於你的MySQL服務器版本使用附近的正確語法手冊「((1 - 1)* 20),20」在行1
我在做什麼毛病我LIMIT
條款,我該如何解決它?
所以不能評價'((1-1)* 20)'爲常數,即使它包含什麼,但常數?這似乎是一個奇怪的限制。我認爲它被認爲是一個常量,因爲它沒有變量......但至少我知道現在該做什麼!謝謝。 – corsiKa 2012-07-30 20:20:06
是的,從數學上講,你代表一個「常量」((1-1)* 20總是相同的)..但從解析器的角度來看,MySQL並不處於數學表達式解析的心情:) – Matt 2012-07-30 20:22:03
我用'limit?,20'和'pageStart =(page - 1)* 20'替換了違規代碼,並且它像一個魅力一樣工作。現在到下一個bug :) – corsiKa 2012-07-30 20:28:58