我有一张表Hall
,其结构类似于
CREATE TABLE Hall_tbl (
hall_id INTeger PRIMARY KEY AUTOINCREMENT NOT NULL,
name TEXT,
price INTEGER,
capacity INTEGER,
availibility INTEGER
);
现在,该应用程序的目的是使其以用户查看日历的方式工作 - >选择日期 - >如果Hall在特定日期可用,则用户可以与其进行交互。
所以,归结为Availibility
很重要,它应该引用Dates
串。用户打开特定日期后,会显示Time Slots
。根据{{1}}用户可以选择大厅。我很难想到如何实现它。
首先,我想创建一个名为Available Time Slots
的表,其列日期从1-1-2018到1-1-2020,并创建多个时间段,如dates
0-1
.. 1-2
并2-24
表示他们没有出售,我会在用户选择开放0
时更改为1
。但这将需要我创建365 * 4行和25列,这是完全没有效率的。那我怎么能这样做呢?
许多与票务预订相关的申请,航班预订已经实施了这样的东西。那么,他们如何有效地做到这一点?
我使用的技术是Hall
答案 0 :(得分:1)
你可以做的是有一个开放日期的表格,只添加开放日期,然后检查日期是否有一行,如果是,那么大厅是开放的,否则不是。
所以根据你的Hall_tbl你可以: -
CREATE TABLE IF NOT EXISTS Hall_tbl (
hall_id INTEGER PRIMARY KEY,
name TEXT,
price INTEGER,
capacity INTEGER,
availibility INTEGER
);
AUTOINCREMENT
不是必需的,除非必要,否则建议不要使用SQLite Autoincrement INSERT INTO Hall_tbl (name, price, capacity, availibility)
VALUES('Grand Hall',200,50,0),
('Large Hall',100,25,0),
('Normal Hall',75,20,0),
('Small Hall',50,15,0);
CREATE TABLE IF NOT EXISTS hall_opening_times (hall_reference, open_date);
INSERT INTO hall_opening_times
VALUES (1,'2018-04-23'), -- Grand hall open on 2018-04-23
(2,'2018-04-23'), -- Large Hall open on 2018-04-23
(2,'2018-04-25'), -- Large Hall open on 2018-04-25
(3,'2018-04-24'), -- Normal Hall open on 2018-04-24
(4,'2018-04-23'); -- Small Hall open on 2018-04-23
以下内容将返回单行,其中单个列的值为0(未打开)或1(打开): -
今天检查大礼堂(这里是2018-04-23)
SELECT count() > 0 AS hall_open FROM hall_opening_times WHERE hall_reference = 1 AND date(open_date) = date('now');
hall_open
列中),因为大礼堂(ID = 1)今天在2018-04-03开放(date('now')
)今天检查师范大厅
SELECT count() > 0 AS hall_open FROM hall_opening_times WHERE hall_reference = 3 AND date(open_date) = date('now');
您可以使用以下内容获取开放大厅列表: -
SELECT group_concat(name,' - ') AS open_halls
FROM hall_opening_times JOIN Hall_tbl ON hall_reference = Hall_tbl.hall_id
WHERE open_date = date('now')
2018-04-23将返回(在open_halls栏中): -
大礼堂 - 大礼堂 - 小礼堂
如果以前的SQL更改为(明天2018-04-24检查): -
SELECT group_concat(name,' - ') AS open_halls
FROM hall_opening_times JOIN Hall_tbl ON hall_reference = Hall_tbl.hall_id
WHERE open_date = date('now','+1 DAY')
然后它会返回: -
师范大厅
您可以使用以下内容修剪过去的open_times(如果需要) -
DELETE FROM hall_opening_times WHERE open_date < date('now','-1 WEEK');
日期格式yyyy-MM-dd是使用SQLite日期函数识别/支持的日期格式,而不是d-M-yyyy可以使事情变得更加简单。