求mysql里面的两表联查分页语句
create table Book (
BID int identity,
BSID int null,
BName nvarchar(200) not null,
BAuthor nvarchar(200) not null,
BISBN nvarchar(50) not null,
BTOC ntext null,
BComment ntext null,
BPic nvarchar(100) null,
BPrice numeric(8,2) not null,
BCount int not null,
BDate datetime not null,
BSaleCount int null,
constraint PK_BOOK primary key (BID)
)
create table BSCategory (
BSID int identity,
BLID int null,
BLName varchar(30) not null,
constraint PK_BSCATEGORY primary key (BSID)
)
这两个表中的bsid是主外键关系 我的要求是要分页,请各位大神指点指点哈,具体是什么样的请告知!!!
[解决办法]
你select你要的数据之后,添加一个ROW_Number(),排序要求按照你自己的需要定义,然后根据这个rownumber分页。
[解决办法]
if @PageIndex = 1 OR @PageIndex >= CEILING((@TotalRowCount+0.0)/@PageSize)
begin
if @PageIndex = 1 --如果是第一页就执行以上代码,这样会加快执行速度
begin
set @strSQL = 'select top ' + str(@PageSize) +' '+@Fields+ ' from [' + @TableName + ']' + @tempWhere1 + ' ' + @tempOrder1
end
if @PageIndex >= CEILING((@TotalRowCount+0.0)/@PageSize) --返回最后一页数据,这样会加快执行速度
begin
set @strSQL = 'SELECT TOP ' + STR(@PageSize) + ' ' + @Fields + ' FROM ('
+ 'SELECT TOP ' + STR(ABS(@TotalRowCount-@PageSize*@PageIndex+@PageSize))
+ ' ' + @Fields + ' FROM '
+ @TableName + @tempWhere1 + @tempOrder2 + ' ) AS tmpTab '
+ @tempOrder1
end
end
else
begin --以下代码赋予了@strSQL以真正执行的SQL代码
if @PageIndex <= CEILING((@TotalRowCount+0.0)/@PageSize)/2
begin
set @strSQL = 'SELECT TOP ' + STR(@PageSize) + ' ' + @Fields + ' FROM ( '
+ 'SELECT TOP ' + STR(@PageSize) + ' ' + @Fields + ' FROM ( '
+ ' SELECT TOP ' + STR(@PageSize*@PageIndex) + ' ' + @Fields
+ ' FROM ' + @TableName + @tempWhere1 + @tempOrder1 + ' ) AS tmpTab '
+ @tempOrder2 + ' ) AS tmpTab ' + @tempOrder1
end
else --反向检索
begin
set @strSQL = 'SELECT TOP ' + STR(@PageSize) + ' ' + @Fields + ' FROM ( '
+ ' SELECT TOP ' + STR(abs(@TotalRowCount-@PageSize *@PageIndex+@PageSize)) + ' ' + @Fields
+ ' FROM ' + @TableName + @tempWhere1 + @tempOrder2 + ' ) AS tmpTab '
+ @tempOrder1
end
end
EXEC(@strSQL)
[解决办法]
mysql 分页直接用limit