我目前正在使用MySQL 5.7编写一些存储过程。这些存储过程通常联接在具有1-2百万条记录的表上,并根据用户在前端选择的过滤器输出记录。
存储过程具有分页逻辑,该逻辑目前可以像这样工作-
find_in_set
过滤数据,然后在所需列上使用Order By子句。Create temp table Temp AS (
SELECT my req columns
FROM table
# all joins #
WHERE # filters #
Order by columns);
SET InitialRowCount = (case when PageSize = 0 then 0 else (PageNumber - 1) * FinalPageSize END);
SELECT columns
FROM TempTable
LIMIT InitialRowCount , FinalPageSize;
使用这种方法,我必须始终提取所有数据,无论请求的页码/页面大小如何,并使用给定的过滤器创建一个临时表。
我想知道是否有一种方法可以使我的查询像这样:
User Request -
Name - matt, john
Last Login - mydate
order by column - last name
page number - 2
page size 30
What I would like to happen -
Select columns
from
#all joins here#
WHERE Clause
Order By Last Name
AND GIVE Page Number 2 with 30 records
我不想总是提取所有记录并存储在临时表中。我只想查询所需的记录。 目前,我无法在查询中直接使用上述逻辑,因为我没有可以像这样使用的主键:
WHERE pk > initial row count
AND LIMIT pagesize