gpt4 book ai didi

c# - 如何选择相邻座位?座位表

转载 作者:行者123 更新时间:2023-11-30 14:43:26 24 4
gpt4 key购买 nike

先生们,

我有一个票务系统。现在,当用户要求 2 或 3 张票时,我必须选择相邻的地方。每张票都有行号和列号。相邻位置的概念是在同一行中相邻列号的位置。这些票在 sql server 数据库中。关于搜索可用相邻座位的算法有什么想法吗?

问候,

卡米洛

最佳答案

你可以通过在 Column = Column+1 上加入 table 来获得两个相邻的座位:

SELECT ...
FROM Seats A
JOIN Seats B ON A.Row = B.Row AND A.Column = B.Column+1
WHERE A.IsReserved = 0
AND B.IsReserved = 0

您可以通过在 Column=Column+1、+2、+3 上重复加入来将其扩展到 3-4 个席位链。如果您想要针对任何序列长度的更通用的解决方案,您将不得不使用递归 CTE,这会变得很复杂。对于大多数用例,简单连接就可以正常工作。

例如:

create table Seats (Row int not null
, Col int not null
, IsReserved bit not null
, constraint pkSeatsRowColumn primary key (Row, Col));
go
insert into Seats (Row, Col, IsReserved)
select 1,1,0 union all
select 1,2,0 union all
select 1,3,1 union all
select 1,4,0 union all
select 1,5,0 union all
select 1,6,0 union all
select 2,1,0;

with cteAnchor as (
SELECT Row, Col, 1 as [length]
FROM Seats
WHERE IsReserved = 0)
, cteRecursive as (
SELECT Row, Col, [length]
FROM cteAnchor
UNION ALL
SELECT c.Row, c.Col, c.[length]+1
FROM Seats s
JOIN cteRecursive c
ON s.Row = c.Row and s.Col = c.Col+c.[length]
WHERE s.IsReserved = 0)
select * from cteRecursive

递归查询将返回包含起始座位号和序列长度的集合中的所有可用座位序列。如果您只需要长度为 3 的序列,则添加必要的 WHERE 子句,查询将返回座位 (1,4),这是我的示例数据中唯一一个旁边还有 2 个可用座位的座位。

关于c# - 如何选择相邻座位?座位表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1971628/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com