根据企业的ID可以发布多个样品,这些样品有可能是连续发的
在列表上显示出来的话,很有可能都是显示一个企业发布的样品,这样不行,你看可不可以,每个企业只显示一个样品
比如说一页显示33个样品,也是就是33个企业的样品(都显示一个),如果还有余下的企业以此例推,到下一页,如果根据企业ID发布的样品都显示一个完之后,接着显示样品的第二个,按照上面的显示方法以此例推
企业表Corpoation_cn 字段 cid
样品表Product_cn 字段 id,cid,pname,pic
拜求,本人在线等
30 个解决方案
#1
看不懂
#2
select distinct(cid),id,pname,pic from Product_cn
#3
select distinct(cid),id,pname,pic from Product_cn order by id
#4
楼上的语句不能完全满足要求。
#5
不知道你最终的需求
#6
楼上都不能满足要求,好像要创建索引
#7
deknight
(追逐梦想)
比如说有说个企业,10个企业中发布样品的数量不同.
最终的想法是在列表页,把每个企业发布的样品都取一个出来,当取到最后个的企业取一个样品之后,接着取第二个样品,以后以此例推.根据样品的ID倒序
如果按照常规的方法,都只能一个企业样品显示完,这样不合要求
(追逐梦想)
比如说有说个企业,10个企业中发布样品的数量不同.
最终的想法是在列表页,把每个企业发布的样品都取一个出来,当取到最后个的企业取一个样品之后,接着取第二个样品,以后以此例推.根据样品的ID倒序
如果按照常规的方法,都只能一个企业样品显示完,这样不合要求
#8
你还要排序?
#9
加分页???
#10
需要最新发布的样品放在前面
#11
比如企业A B各发布5个产品,你的意思是
先取出
A 1 B 1 然后
A 2 B 2
A 3 B 3
一直到最后?
我还是没明白你上面的描述
先取出
A 1 B 1 然后
A 2 B 2
A 3 B 3
一直到最后?
我还是没明白你上面的描述
#12
要分页的,假如发布了N个企业发布1万个,甚至更多样品,那肯定要分页的呀
#13
"假如发布了N个企业"写错了"假如有N个企业"
#14
那我问你 `假设有一万个企业 每页显示20条` 那么企业那不要先排完一万个啊``才可以看到 企业的第二条信息?
#15
deknight
(追逐梦想)
楼上,我就是这个意思,并且根据样品的先后顺序排序,最先发布要排在前观
(追逐梦想)
楼上,我就是这个意思,并且根据样品的先后顺序排序,最先发布要排在前观
#16
是的,这是项目需求,没办法
#17
你的需求是:先显示每个企业发布的最新的一个产品,直到显示完所有企业之后再显示每个企业的第二个产品??
#18
你可以这样,根据企业分组,把Id排序,取第一个产品
#19
zyl_leilei
(小蕾)
是这样的
(小蕾)
是这样的
#20
select distinct(cid),id,pname,pic from Product_cn order by datetime
#21
zyl_leilei
(小蕾)
楼上的,可不可写出来,让我参考下
(小蕾)
楼上的,可不可写出来,让我参考下
#22
看不懂
#23
哎,怎么没有人帮我解答呀
#24
挺难的` group by 和 distanct 都不好用``
#25
你要的这个,不是1个SQL能出来的
#26
deknight
(追逐梦想)
我也觉得在语句里实现这样的很难的,不过可以用另外的方法实现
这是我的思路
每个企业的样品都要自己的独立有索引,1、2、3、4、5这样的,也就是说每个企业都有这样的样品索引。然后查的时候就order by 这个索引,倒序,
可不可以
(追逐梦想)
我也觉得在语句里实现这样的很难的,不过可以用另外的方法实现
这是我的思路
每个企业的样品都要自己的独立有索引,1、2、3、4、5这样的,也就是说每个企业都有这样的样品索引。然后查的时候就order by 这个索引,倒序,
可不可以
#27
晕死,看了半天,是看下面的回复和你的回复才看懂意思了,
用存储过程分页查询吧:
没时间整理,自己整理吧
用存储过程分页查询吧:
没时间整理,自己整理吧
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
go
create 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
#28
s8975565
("漠"︶路人)
楼上的,分页肯定是用储存过程的,关键要想显示想得显示的数据,这个才是难点呀
("漠"︶路人)
楼上的,分页肯定是用储存过程的,关键要想显示想得显示的数据,这个才是难点呀
#29
赞成
#30
对于db2 V9及以上的,应该可以用如下sql:
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
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
#1
看不懂
#2
select distinct(cid),id,pname,pic from Product_cn
#3
select distinct(cid),id,pname,pic from Product_cn order by id
#4
楼上的语句不能完全满足要求。
#5
不知道你最终的需求
#6
楼上都不能满足要求,好像要创建索引
#7
deknight
(追逐梦想)
比如说有说个企业,10个企业中发布样品的数量不同.
最终的想法是在列表页,把每个企业发布的样品都取一个出来,当取到最后个的企业取一个样品之后,接着取第二个样品,以后以此例推.根据样品的ID倒序
如果按照常规的方法,都只能一个企业样品显示完,这样不合要求
(追逐梦想)
比如说有说个企业,10个企业中发布样品的数量不同.
最终的想法是在列表页,把每个企业发布的样品都取一个出来,当取到最后个的企业取一个样品之后,接着取第二个样品,以后以此例推.根据样品的ID倒序
如果按照常规的方法,都只能一个企业样品显示完,这样不合要求
#8
你还要排序?
#9
加分页???
#10
需要最新发布的样品放在前面
#11
比如企业A B各发布5个产品,你的意思是
先取出
A 1 B 1 然后
A 2 B 2
A 3 B 3
一直到最后?
我还是没明白你上面的描述
先取出
A 1 B 1 然后
A 2 B 2
A 3 B 3
一直到最后?
我还是没明白你上面的描述
#12
要分页的,假如发布了N个企业发布1万个,甚至更多样品,那肯定要分页的呀
#13
"假如发布了N个企业"写错了"假如有N个企业"
#14
那我问你 `假设有一万个企业 每页显示20条` 那么企业那不要先排完一万个啊``才可以看到 企业的第二条信息?
#15
deknight
(追逐梦想)
楼上,我就是这个意思,并且根据样品的先后顺序排序,最先发布要排在前观
(追逐梦想)
楼上,我就是这个意思,并且根据样品的先后顺序排序,最先发布要排在前观
#16
是的,这是项目需求,没办法
#17
你的需求是:先显示每个企业发布的最新的一个产品,直到显示完所有企业之后再显示每个企业的第二个产品??
#18
你可以这样,根据企业分组,把Id排序,取第一个产品
#19
zyl_leilei
(小蕾)
是这样的
(小蕾)
是这样的
#20
select distinct(cid),id,pname,pic from Product_cn order by datetime
#21
zyl_leilei
(小蕾)
楼上的,可不可写出来,让我参考下
(小蕾)
楼上的,可不可写出来,让我参考下
#22
看不懂
#23
哎,怎么没有人帮我解答呀
#24
挺难的` group by 和 distanct 都不好用``
#25
你要的这个,不是1个SQL能出来的
#26
deknight
(追逐梦想)
我也觉得在语句里实现这样的很难的,不过可以用另外的方法实现
这是我的思路
每个企业的样品都要自己的独立有索引,1、2、3、4、5这样的,也就是说每个企业都有这样的样品索引。然后查的时候就order by 这个索引,倒序,
可不可以
(追逐梦想)
我也觉得在语句里实现这样的很难的,不过可以用另外的方法实现
这是我的思路
每个企业的样品都要自己的独立有索引,1、2、3、4、5这样的,也就是说每个企业都有这样的样品索引。然后查的时候就order by 这个索引,倒序,
可不可以
#27
晕死,看了半天,是看下面的回复和你的回复才看懂意思了,
用存储过程分页查询吧:
没时间整理,自己整理吧
用存储过程分页查询吧:
没时间整理,自己整理吧
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
go
create 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
#28
s8975565
("漠"︶路人)
楼上的,分页肯定是用储存过程的,关键要想显示想得显示的数据,这个才是难点呀
("漠"︶路人)
楼上的,分页肯定是用储存过程的,关键要想显示想得显示的数据,这个才是难点呀
#29
赞成
#30
对于db2 V9及以上的,应该可以用如下sql:
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
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