有一个企业表和一个样品
根据企业的ID可以发布多个样品,这些样品有可能是连续发的
在列表上显示出来的话,很有可能都是显示一个企业发布的样品,这样不行,你看可不可以,每个企业只显示一个样品
比如说一页显示33个样品,也是就是33个企业的样品(都显示一个),如果还有余下的企业以此例推,到下一页,如果根据企业ID发布的样品都显示一个完之后,接着显示样品的第二个,按照上面的显示方法以此例推
企业表Corpoation_cn 字段 cid
样品表Product_cn 字段 id,cid,pname,pic
拜求,本人在线等
根据企业的ID可以发布多个样品,这些样品有可能是连续发的
在列表上显示出来的话,很有可能都是显示一个企业发布的样品,这样不行,你看可不可以,每个企业只显示一个样品
比如说一页显示33个样品,也是就是33个企业的样品(都显示一个),如果还有余下的企业以此例推,到下一页,如果根据企业ID发布的样品都显示一个完之后,接着显示样品的第二个,按照上面的显示方法以此例推
企业表Corpoation_cn 字段 cid
样品表Product_cn 字段 id,cid,pname,pic
拜求,本人在线等
select distinct(cid),id,pname,pic from Product_cn order by id
(追逐梦想)
比如说有说个企业,10个企业中发布样品的数量不同.
最终的想法是在列表页,把每个企业发布的样品都取一个出来,当取到最后个的企业取一个样品之后,接着取第二个样品,以后以此例推.根据样品的ID倒序
如果按照常规的方法,都只能一个企业样品显示完,这样不合要求
先取出
A 1 B 1 然后
A 2 B 2
A 3 B 3
一直到最后?
我还是没明白你上面的描述
(追逐梦想)
楼上,我就是这个意思,并且根据样品的先后顺序排序,最先发布要排在前观
(小蕾)
是这样的
(小蕾)
楼上的,可不可写出来,让我参考下
挺难的` group by 和 distanct 都不好用``
(追逐梦想)
我也觉得在语句里实现这样的很难的,不过可以用另外的方法实现
这是我的思路
每个企业的样品都要自己的独立有索引,1、2、3、4、5这样的,也就是说每个企业都有这样的样品索引。然后查的时候就order by 这个索引,倒序,
可不可以
用存储过程分页查询吧:
没时间整理,自己整理吧CREATE PROCEDURE GetRecordFromPage
@tblName varchar(255), -- 表名
@fldName varchar(255), -- 字段名
@PageSize int = 10, -- 页尺寸
@PageIndex int = 1, -- 页码
@IsCount bit = 0, -- 返回记录总数, 非 0 值则返回
@OrderType bit = 0, -- 设置排序类型, 非 0 值则降序
@strWhere varchar(4000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL varchar(6000) -- 主语句
declare @strTmp varchar(6000) -- 临时变量
declare @strOrder varchar(6000) -- 排序类型
if @OrderType != 0
begin
set @strTmp = '<(select min'
set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
set @strTmp = '>(select max'
set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
+ @strOrder
if @strWhere != ''
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
+ @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
+ @fldName + '] from [' + @tblName + '] where (' + @strWhere + ') '
+ @strOrder + ') as tblTmp) and (' + @strWhere + ') ' + @strOrder
if @PageIndex = 1
begin
set @strTmp = ''
if @strWhere != ''
set @strTmp = ' where (' + @strWhere + ')'
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
+ @tblName + ']' + @strTmp + ' ' + @strOrder
end
if @IsCount != 0
set @strSQL = 'select count(*) as Total from [' + @tblName + ']'
exec (@strSQL)
GO go
if exists (select * from sysobjects where xtype='p' and name='UP_Test_Page')
drop proc UP_Test_Page
gocreate proc UP_Test_Page
@pageSize int,
@pageIndex int
as
declare @n int
begin
select * into ##temp from ( select * from test) a
set @n = (select count(*) from ##temp)
if(@pageIndex <1)
set @pageIndex=1
exec GetRecordFromPage '##temp','tid',@pageSize,@pageIndex,'0','0',''
drop table ##temp
return @n
end go
select pname, cid
from
(select pname, cid, row_number() over (partition by cid order by id) as order_no
from Product_cn ) as tmp
order by order_no