I want to fetch my results a 'page' at a time; I want the page number to be a parameter (in a JDBC prepared statement). Consider the following snippet
SELECT * FROM thread t ORDER BY t.id LIMIT ((? - 1) * 20), 20
So ideally, this would result, for page 1, to LIMIT 0, 20
.
When I test
SELECT * FROM thread t ORDER BY t.id LIMIT ((1 - 1) * 20), 20
I am told I have a syntax error. I don't see what it could be, though - it's just some simple math. All it tells me is
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '((1 - 1) * 20), 20' at line 1
What am I doing wrong with my LIMIT
clause, and how can I fix it?
Define Offset for the query.
For example
if you want page-1 (records 1-10) offset=0,limit=10; for page-2 (records 11-20) offset =20,limit =10; and use the following query :
example:
MySQL requires numeric constants for that LIMIT syntax.
From http://dev.mysql.com/doc/refman/5.7/en/select.html:
Compute the constant on the Java side.
This cannot be done.
See solution here: MySQL Math and COUNT(*) in LIMIT
I would recommend using javascript or something to handle the first parameter (i.e. offset) such as:
limit 0,20
on first page andlimit 21,20
on second...For example if your first page has a get variable in the url www.example.com?page=1