关于如何在sql数据库里查询多次返回数据的做法

原创 2015年07月08日 16:06:01

 今天老板叫我查询未来三个月的产品剩余情况,因为我们的产品是可以根据日期预定购买的 而每天的产品数量都是一样的。就像你去电影院看电影,电影院有100个座位,我提前订票,那么今天的剩余座位 和明天的是不冲突的,但是剩余可订的座位你要显示给用户看啊 ,是不是。相信你在美团网之类购买电影票的都知道流程。

   但是呢 你应该怎么把未来三个月的数据全都查出来呢 ?

      你不可能直接在客户端写90条sql查询语句吧!这不科学啊  是不是,那么老板教我的我也就分享出来,有不足或有更好的建议请多多指教


这里给出存储过程的源代码

  use databaseName
go
createproc [dbo].[sp_getwhileloop]//创建存储过程
 @productid as bigint  //需要传进来的参数
as
declare @i as integer
declare @date as datetime
declare @num as int
declare @stklvl as int
declare @stk as int
declare @isEn as varchar



set @i = 0
set @date = getdate();

--这里创建一个虚拟的表 待会需要存数据
create table #tempdate
(orderdate smalldatetime,
havestock nvarchar(2))


--后三个月的天数 //这里主要是要循环的次数  
while (@i < datediff(dd , getdate(), dateadd(mm, 3,getdate())))
begin
set @i = @i + 1--当@i大于三个月的天数了就不会进来再执行了
set @date = dateadd(day, 1, @date)--这是循环一次天数就会+1
set @num=(select count(*) from torderdata as o,mproduct as p  where 
       convert(varchar(10),o.enddate,120)>=convert(varchar(10),getdate()+@i,120)
  and o.productid=p.productid and p.productid=@productid)--这是我要在表中获取到的数据1


  set @stklvl = ( select  top 1 p.stksafetylvl
 from torderdata as o,mproduct as p  where 
      convert(varchar(10),o.enddate,120)>=convert(varchar(10),getdate()+@i,120)
 and o.productid=p.productid and p.productid=@productid  ) --这是我要在表中获取到的数据


 set @stk = ( select top 1 p.StkLvl
 from torderdata as o,mproduct as p  where 
      convert(varchar(10),o.enddate,120)>=convert(varchar(10),getdate()+@i,120)
 and o.productid=p.productid and p.productid=@productid )--这是我要在表中获取到的数据3

--这里的条件判断也是我要赋值返回去的值
 if(@stk -@num>20)
 begin
 set @isEn='Y'
 end
 if(@stk -@num<=20 and @stk -@num>0)
 begin
 set @isEn='N'
 end


--循环一次之后需要的数据该有的都有了 把需要的数据按照你上面创建虚拟的表插入进去
insert into #tempdate (orderdate, havestock) values (@date, @isEn)


set nocount on;



end 

--最后你调用这个存储过程这里会把所有数据 (90条)返回给你
select * from #tempdate 

--最后删除你创建的临时表
drop table #tempdate 



你在调用时 需要自己写一个model类  类里面的属性你需要和临时表里的字段属性相对应,因为你接收到的是一个集合数据


这样,就能解决你的客户端的性能问题了  不过这里牺牲了服务端,但我们的服务端有那么强大   


希望你有更好的建议,谢谢

Android数据库中查找一条数据 query方法详解

public Cursor query(String table,String[] columns,String selection,String[] selectionArgs,String gro...
  • chaozhung
  • chaozhung
  • 2013年06月05日 09:47
  • 9713

数据库查询结果、Ibatis的ResultMap与JavaBean的对应关系

对数据库的Select查询结果字段多少、名称、类型先与Ibatis的ResultMap对应是否一致,然后Ibatis的ResultMap再与JavaBean对应是否一致。Ibatis的ResultMa...
  • aspnet2002web
  • aspnet2002web
  • 2016年05月26日 14:22
  • 2299

C# 数据库查询取返回值

数据库课设期末考试结束后,就开始了为期一周的数据库课程设计。幸好这学期学习了C#,所以,对付这个还是有信心的。对于数据库的增删查该,难度并不是很大。数据库连接成功后,之后的便是SQl语句的掌握。小小的...
  • sinat_27714067
  • sinat_27714067
  • 2016年06月30日 17:41
  • 5678

SQl Server2008,2005附加过多次数据库都失败(讨论)

求教: 我用的SQl Server2008附加过多次数据库都失败,错误一致,将文件放置根目录下一样附加不上。 错误信息: 执行Transact-SQL语句或批处理时发生了异常。 无法打开物...
  • ZKLxuankai
  • ZKLxuankai
  • 2012年09月14日 15:12
  • 1939

mybatis查询返回空,SQL数据库执行有数据!

我的数据库为Oracle,可以插入,更新,但在在Mybatis中执行SQL查询返回的数据发现返回NULL,但是生成SQL放在数据库中查询是有数据的,并且SQL是正确的!  这是没有改动的XML:  ...
  • u013305864
  • u013305864
  • 2017年11月04日 23:28
  • 66

【数据库SQL】修复数据库BCP修复(导出导入的做法)

--处理时方法如下(以专卖店V9为例,该方法叫bcp处理): --在进行操作前,请先备份数据库(备份mdf和log文件) USE MASTER 操作步骤: 1.首先在D盘建立TESTD...
  • xiongyongting
  • xiongyongting
  • 2017年01月03日 12:30
  • 429

同时发送了多次ajax请求,且都是异步的,怎样拿取某一次ajax请求的返回数据。

一:需求 要实如下输入框可支持模糊查询,查询字符串:“nick”。 二:实现原理 给输入框绑定keyup事件,然后ajax请求,带输入的参数去后台数据库拿出数据再返回到页面。 三:分析 1)...
  • jiangjiaoshou123
  • jiangjiaoshou123
  • 2015年04月10日 17:17
  • 6295

多线程多次查询数据生成一个文件——解决内存溢出

1,需求背景:        内存溢出的问题最初调试时,发现是生成Excel时用StringBuilder变量缓存数据,当数据过大时,导致内存溢出(解决);之后再次测试,发现由于取数据时涉及到多表查询...
  • fengyingfeng
  • fengyingfeng
  • 2013年07月09日 13:49
  • 1038

MySQL学习笔记_12_Linux下C++/C连接MySQL数据库(二) --返回数据的SQL

 Linux下C++/C连接MySQL数据库(二) --返回数据的SQL 引:     返回数据的SQL是指通过查询语句从数据库中取出满足条件的数据记录 从MySQL数据库值哦功能检索数...
  • u011744843
  • u011744843
  • 2015年05月08日 11:13
  • 516

SQL性能优化中的底层概念,时间复杂度,算法和数据结构,数据库组成,查询优化和表关联原理.

原文地址: http://blog.jobbole.com/100349/ 一提到关系型数据库,我禁不住想:有些东西被忽视了。关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大...
  • schao501917
  • schao501917
  • 2016年12月01日 08:48
  • 1563
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于如何在sql数据库里查询多次返回数据的做法
举报原因:
原因补充:

(最多只允许输入30个字)