影片上映档期的查询的一个bug

jayqean 2010-06-01 12:26:02

--创建影厅信息表(cinemaInfo)
create table cinemaInfo
(
cid INT IDENTITY primary key,--编号
cname varchar(10) not null, --影厅名称
remark varchar(50)
);
--电影信息表(filmInfo)
create table filmInfo
(
fid int identity primary key,--编号
fname varchar(20) not null,--电影名称
director varchar(20) not null,--导演
starring varchar(20) not null,--主演
style varchar(20) not null,--类型
flanguage varchar(20) not null,--语言
fdate date not null,--上映日期(电影首映日期)
[length] int not null,--片长(电影所播放的长度) 单位:分钟
price dec(4,1) not null,--价格
[image] varchar(50) not null,--图片
drama varchar(100),--剧情
critic varchar(50) --一句话影评
);

--影片上映时间表(release)
create table release
(
rid INT identity primary key,--上映时间表编号
fid int references filmInfo(fid),--电影编号(外键)
cid int references cinemaInfo(cid),--所要播放的影厅编号(外键)
rdate datetime not null,--上映日期
rtime datetime not null --上映时间
);


insert into cinemainfo values('一号影厅','一号影厅');
insert into cinemainfo values('二号影厅','二号影厅');
insert into cinemainfo values('三号影厅','三号影厅');

insert into filmInfo values('钢铁侠2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
insert into filmInfo values('叶问2','冯晓刚','甄子丹','动作片','国语','2010-06-01','90','65','/upload/yy.jpg','','')
---插入1-----------------------------------------
insert into filmInfo values('变形金钢2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
-------------------------------------------------
insert into release values(1,1,'2010-06-01','2010-06-01 19:30');
insert into release values(1,1,'2010-06-01','2010-06-01 21:30');
----插入2-----------------------------------------
insert into release values(3,1,'2010-06-01','2010-06-01 23:50');
---------------------------------------------------
*/
--SELECT * FROM cinemaInfo ci
--SELECT * FROM filmInfo fi
--SELECT * FROM release r

--存储过程
IF OBJECT_ID('[p_test]') IS NOT NULL
DROP PROC [p_test]
GO
CREATE PROC [p_test]
@电影编号 int,
@影厅编号 int,
@放映时间 datetime,
@message varchar(20) output
AS
IF EXISTS(
SELECT 1
FROM filmInfo a
JOIN cinemaInfo b
ON a.fid = @电影编号
AND b.cid = @影厅编号
AND EXISTS(
SELECT *
FROM release m
JOIN filmInfo n
ON m.fid = n.fid
WHERE m.cid = b.cid
AND m.fid<>a.fid
AND (
DATEADD(mi, a.[length]+30, @放映时间) BETWEEN rtime AND DATEADD(mi, n.[length]+30, rtime)
OR @放映时间 BETWEEN rtime AND DATEADD(mi, n.[length]+30, rtime)
)
)
)
set @message = '在此时间不能放映'
ELSE
set @message = '在此时间可以放映'
GO


declare
@message varchar(20)
EXEC [p_test] '1','1','2010-06-02 1:30:00',@message output;
print @message
/*
----------------
在此时间不能放映

(1 行受影响)
*/

declare
@message varchar(20)
EXEC [p_test] '2','1','2010-06-01 15:31:00',@message output;
print @message
/*
----------------
在此时间可以放映

(1 行受影响)
*/

declare
@message varchar(20)
EXEC [p_test] '3','1','2010-06-02 1:30:00',@message output;
print @message
插入电影编号2 在2010-06-01 1:30:00 到影厅1播放
这里打印 在此时间可以放映

一部影片播放完后,到下一部影片开始 中途清场时间间隔 30分钟

现在想将 变形金钢2 加入档期 该电影编号为3
用户选择的 影厅编号1 电影编号3 日期选择 2010-06-02 时间也可以选择
我想判断 该影片(变形金钢2) 在该影厅(编号1) 该日期(2010-06-02) 是否能在选择的时间 上映?
比如在2010-06-02 1:30:00是不能加入档期的 现在居然可以
那存储过程写得有点bug
...全文
419 11 打赏 收藏 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
yjwcwrkks 2010-06-02
  • 打赏
  • 举报
回复
我是接分的。
jayqean 2010-06-01
  • 打赏
  • 举报
回复

declare
@message varchar(20)
EXEC [p_test] '3','1','2010-06-02 1:30:00',@message output;
print @message
/*
-------------------
插入电影编号3 在2010-06-02 1:30:00 到影厅1播放
这里打印 在此时间可以放映
*/
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 xys_777 的回复:]
如果写存储过程,我觉得还是不要写成一句。
[/Quote]
我好好揣摩一下永生哥这句话的一起
jayqean 2010-06-01
  • 打赏
  • 举报
回复
谢谢楼上几位高手一直来帮我解决
jayqean 2010-06-01
  • 打赏
  • 举报
回复

IF OBJECT_ID('[p_test]') IS NOT NULL
DROP PROC [p_test]
GO
CREATE PROC [p_test]
@电影编号 int,
@影厅编号 int,
@放映时间 datetime,
@message varchar(20) output
AS
--查出电影的结束时间,并存入变量
declare @结束时间 datetime
select @结束时间 = DATEADD(mi,length+30,@放映时间) from filminfo where fid = @电影编号
print @结束时间
--只要存在(查该影厅的所有播放时间和结束时间,如果播放时间在放映时间中,或者结束时间在播放时间中,),错误
IF EXISTS(
SELECT *
FROM release m JOIN filmInfo n ON m.fid = n.fid
WHERE m.cid = @影厅编号
and
(
m.rtime BETWEEN @放映时间 AND @结束时间
or
DATEADD(mi, n.[length]+30, m.rtime) BETWEEN @放映时间 AND @结束时间
)
)
set @message = '在此时间不能放映'
else
set @message = '在此时间可以放映'
go

我也贴出来 我还是喜欢这种写法
测试了,木有bug
流氓兔 2010-06-01
  • 打赏
  • 举报
回复
JF
永生天地 2010-06-01
  • 打赏
  • 举报
回复
如果写存储过程,我觉得还是不要写成一句。
thinclient 2010-06-01
  • 打赏
  • 举报
回复
too long for me to digest!
东那个升 2010-06-01
  • 打赏
  • 举报
回复
我是接分的
htl258_Tony 2010-06-01
  • 打赏
  • 举报
回复
--创建影厅信息表(cinemaInfo)
create table cinemaInfo
(
cid INT IDENTITY primary key,--编号
cname varchar(10) not null, --影厅名称
remark varchar(50)
);
--电影信息表(filmInfo)
create table filmInfo
(
fid int identity primary key,--编号
fname varchar(20) not null,--电影名称
director varchar(20) not null,--导演
starring varchar(20) not null,--主演
style varchar(20) not null,--类型
flanguage varchar(20) not null,--语言
fdate date not null,--上映日期(电影首映日期)
[length] int not null,--片长(电影所播放的长度) 单位:分钟
price dec(4,1) not null,--价格
[image] varchar(50) not null,--图片
drama varchar(100),--剧情
critic varchar(50) --一句话影评
);

--影片上映时间表(release)
create table release
(
rid INT identity primary key,--上映时间表编号
fid int references filmInfo(fid),--电影编号(外键)
cid int references cinemaInfo(cid),--所要播放的影厅编号(外键)
rdate datetime not null,--上映日期
rtime datetime not null --上映时间
);


insert into cinemainfo values('一号影厅','一号影厅');
insert into cinemainfo values('二号影厅','二号影厅');
insert into cinemainfo values('三号影厅','三号影厅');

insert into filmInfo values('钢铁侠2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
insert into filmInfo values('叶问2','冯晓刚','甄子丹','动作片','国语','2010-06-01','90','65','/upload/yy.jpg','','')
---插入1-----------------------------------------
insert into filmInfo values('变形金钢2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
-------------------------------------------------
insert into release values(1,1,'2010-06-01','2010-06-01 19:30');
insert into release values(1,1,'2010-06-01','2010-06-01 21:30');
----插入2-----------------------------------------
insert into release values(3,1,'2010-06-01','2010-06-01 23:50');
----插入3-----------------------------------------
insert into release values(2,1,'2010-06-02','2010-06-02 1:30');
---------------------------------------------------
*/
--SELECT * FROM cinemaInfo ci
--SELECT * FROM filmInfo fi
--SELECT * FROM release r

--存储过程
IF OBJECT_ID('[p_test]') IS NOT NULL
DROP PROC [p_test]
GO
CREATE PROC [p_test]
@电影编号 int,
@影厅编号 int,
@放映时间 datetime,
@message varchar(20) output
AS
IF EXISTS(
SELECT 1
FROM filmInfo a
JOIN cinemaInfo b
ON a.fid = @电影编号
AND b.cid = @影厅编号
AND EXISTS(
SELECT *
FROM release m
JOIN filmInfo n
ON m.fid = n.fid
WHERE m.cid = b.cid
AND m.fid<>a.fid
AND (
DATEADD(mi, a.[length]+30, @放映时间) BETWEEN rtime AND DATEADD(mi, n.[length]+30, rtime)
OR @放映时间 BETWEEN rtime AND DATEADD(mi, n.[length]+30, rtime)
)
)
)
set @message = '在此时间不能放映'
ELSE
set @message = '在此时间可以放映'
GO


declare
@message varchar(20)
EXEC [p_test] '1','1','2010-06-02 1:30:00',@message output;
print @message
/*
----------------
在此时间不能放映

(1 行受影响)
*/

declare @message varchar(20)
EXEC [p_test] '2','1','2010-06-01 15:31:00',@message output;
print @message
/*
----------------
在此时间可以放映

(1 行受影响)
*/

GO
declare @message varchar(20)
EXEC [p_test] '3','1','2010-06-02 1:30:00',@message output;
print @message
/*
在此时间不能放映
*/
GO

declare @message varchar(20)
EXEC [p_test] '3','1','2010-06-02 3:30:00',@message output;
print @message
/*
在此时间不能放映
*/
GO

declare @message varchar(20)
EXEC [p_test] '3','1','2010-06-02 3:31:00',@message output;
print @message
/*
在此时间可以放映
*/
GO

declare @message varchar(20)
EXEC [p_test] '3','1','2010-06-02 1:30:00',@message output;
print @message
/*
在此时间不能放映
*/
我测试没问题啊
-晴天 2010-06-01
  • 打赏
  • 举报
回复

--创建影厅信息表(cinemaInfo)
create table cinemaInfo
(
cid INT IDENTITY primary key,--编号
cname varchar(10) not null, --影厅名称
remark varchar(50)
);
--电影信息表(filmInfo)
create table filmInfo
(
fid int identity primary key,--编号
fname varchar(20) not null,--电影名称
director varchar(20) not null,--导演
starring varchar(20) not null,--主演
style varchar(20) not null,--类型
flanguage varchar(20) not null,--语言
fdate datetime not null,--上映日期(电影首映日期)
[length] int not null,--片长(电影所播放的长度) 单位:分钟
price dec(4,1) not null,--价格
[image] varchar(50) not null,--图片
drama varchar(100),--剧情
critic varchar(50) --一句话影评
);

--影片上映时间表(release)
create table release
(
rid INT identity primary key,--上映时间表编号
fid int references filmInfo(fid),--电影编号(外键)
cid int references cinemaInfo(cid),--所要播放的影厅编号(外键)
rdate datetime not null,--上映日期
rtime datetime not null --上映时间
);


insert into cinemainfo values('一号影厅','一号影厅');
insert into cinemainfo values('二号影厅','二号影厅');
insert into cinemainfo values('三号影厅','三号影厅');

insert into filmInfo values('钢铁侠2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
insert into filmInfo values('叶问2','冯晓刚','甄子丹','动作片','国语','2010-06-01','90','65','/upload/yy.jpg','','')
---插入1-----------------------------------------
insert into filmInfo values('变形金钢2','乔恩法弗罗','小罗伯特唐尼','科幻','英语','2010-06-01','90','65','/upload/gg.jpg','','');
-------------------------------------------------
insert into release values(1,1,'2010-06-01','2010-06-01 19:30');
insert into release values(1,1,'2010-06-01','2010-06-01 21:30');
----插入2-----------------------------------------
insert into release values(3,1,'2010-06-01','2010-06-01 23:50');
---------------------------------------------------
--SELECT * FROM cinemaInfo cia.rtime,b.length
--SELECT * FROM filmInfo fi
--SELECT * FROM release r

--存储过程
IF OBJECT_ID('[p_test]') IS NOT NULL
DROP PROC [p_test]
GO
CREATE PROC [p_test]
@电影编号 int,
@影厅编号 int,
@放映时间 datetime,
@message varchar(20) output
AS
if isnull((select top 1 dateadd(mi,b.[length]+30,a.rtime)
from release a inner join filminfo b on a.fid=b.fid
where a.cid=@影厅编号 and a.rtime<=@放映时间
order by a.rtime desc),'1900-1-1')<=@放映时间
and
isnull((select top 1 dateadd(mi,(select [length] from filminfo where fid=@电影编号)+30,rtime)
from release
where cid=@影厅编号 and rtime>@放映时间
order by rtime),'2079-6-6')>=@放映时间
set @message = '在此时间可以放映'
ELSE
set @message = '在此时间不能放映'
GO


declare
@message varchar(20)
EXEC [p_test] '1','1','2010-06-02 1:30:00',@message output;
print @message
/*
----------------
在此时间不能放映

(1 行受影响)
*/
go
declare
@message varchar(20)
EXEC [p_test] '2','1','2010-06-01 15:31:00',@message output;
print @message
/*
----------------
在此时间可以放映

(1 行受影响)
*/
go
declare
@message varchar(20)
EXEC [p_test] '3','1','2010-06-02 1:30:00',@message output;
print @message
/*
----------------
在此时间不能放映

(1 行受影响)
*/

go
drop PROC [p_test]
drop table release
drop table cinemaInfo,filmInfo
详情可查看下方数据集可视化效果。 【数据集概况】 · 检测类别(中文):[自行车(bicycle), 汽车(car), 牛(cow), 鹅(goose), 马(horse), 人(human), 摩托车(motorbike), 羊(sheep), 危险标志(ss danger), 左转标志(ss left), 禁止鸣笛标志(ss no horn), 停车标志(ss parking), 右转标志(ss right), 停止标志(ss stop), 人行横道标志(ss xwalk), 绿灯(tl green), 关灯(tl off), 红灯(tl red), 黄灯(tl yellow)] · 训练集:1365 张 · 验证集:90 张 · 测试集:62 张 · 总计:1517 张 该数据集基于室内模拟交通场景构建,聚焦于交通标志、车辆及动物等目标的精准识别,为智能交通系统训练提供高质量样本,具有显著的行业应用价值与技术研究意义。训练集、验证集与测试集分别包含1365张、90张与62张图像,数据分布比例合理,训练集规模充足以保障模型学习充分,验证集与测试集用于模型性能评估,有效支撑模型迭代优化。所有目标均经过严格标注,边界框绘制精准,类别标注规范统一,无模糊或错误标注情况,确... 【训练曲线与评估图】 【模型训练配置】 参数 | 值 模型 | yolo26n 训练轮数 | 100 epochs 输入尺寸 | 640x640 批次大小 | 24 优化器 | auto 初始学习率 | 0.01 训练设备 【关键指标汇总】 训练了 41 个 epoch,最终轮指标: 指标 | 数值 mAP50 | **0.9644** mAP50-95 | 0.7193 Precision | 0.9278 Recall | 0.9049 train/box_loss | 0.8936 tra...

34,876

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧