我必须使用MySQL中的LIMIT为分页创建一个存储过程。它在我的本地数据库中运行良好,但它不能在服务器上运行。因此,我尝试在谷歌搜索并获得解决方案"在服务器上升级phpmyadmin版本" ,但这是不可能的。所以在没有LIMIT或OFFSET的情况下创建分页的任何替代方法。 ?
在我的代码下面,我试过了。
CREATE DEFINER=`root`@`localhost` PROCEDURE `LazyLoadScope`(IN ClientId INT,IN StartIndex INT,IN Count INT)
BEGIN
DECLARE LowerBound INT;
DECLARE UpperBound INT;
DECLARE rownum INT;
SET LowerBound = ((StartIndex - 1) * Count) + 1;
SET UpperBound = ((StartIndex - 1) * Count) + Count;
SELECT scopeid,scopename,clientid,scope,createddate,ViewDate,IsLocked
FROM scopemaster as sm inner join clientmaster cm on cm.clientid=sm.clientid
where cm.userid=ClientId order by sm.ViewDate desc LIMIT LowerBound,UpperBound ;
END
答案 0 :(得分:4)
@kaushik请尝试以下代码。
CREATE DEFINER=`root`@`localhost` PROCEDURE `LazyLoadScope`(IN ClientId INT,IN StartIndex INT,IN Count INT)
BEGIN
DECLARE LowerBound INT;
DECLARE UpperBound INT;
DECLARE rownum INT;
SET LowerBound = ((StartIndex - 1) * Count) + 1;
SET UpperBound = ((StartIndex - 1) * Count) + Count;
SELECT scopeid,scopename,clientid,scope,createddate,ViewDate,IsLocked
from (SELECT *, @rownum := @rownum + 1 AS rank
from (SELECT sm.scopeid,sm.scopename,sm.clientid,sm.scope,sm.createddate,sm.ViewDate,sm.Is Locked
FROM scopemaster as sm
inner join clientmaster cm on cm.clientid=sm.clientid
where cm.userid=ClientId order by sm.ViewDate desc) d, (SELECT @rownum := 0) r ) m
WHERE rank >= LowerBound and rank <= UpperBound;
END