【发布时间】:2018-12-12 17:30:23
【问题描述】:
过去 2 天我一直在为这个问题挠头——我需要专家的眼光!
基本上,我试图在 1 周内为司机显示计划事件,直到他们关闭。如果司机在 2018 年 12 月 10 日至 2018 年 12 月 21 日期间休息,那么我希望司机翻车到第二天,并在结束日期之前显示他/她的名字。现在结果只显示当天的驱动程序,而不是每天重复显示。
这是一个示例数据集:
CREATE TABLE IF NOT EXISTS planner_events (
planner_id INT(5) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
event_name VARCHAR(100) NOT NULL,
event_start_date DATE,
event_end_date DATE,
user_id INT(5) NOT NULL,
user_type VARCHAR(10) NOT NULL,
date_created DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO planner_events (event_name, event_start_date, event_end_date, user_id, user_type)
VALUES ('Annual Holiday', '2018-12-12', '2018-12-16', 101, 'driver'),
('Alex on leave', '2018-12-12', '2018-12-15', 102, 'driver'),
('Reminder', '2018-12-13', '2018-12-13', 103, 'driver');
CREATE TABLE IF NOT EXISTS drivers (
driver_id INT(5) UNSIGNED AUTO_INCREMENT PRIMARY KEY,
driver_name VARCHAR(100) NOT NULL,
date_created DATETIME DEFAULT CURRENT_TIMESTAMP
);
INSERT INTO drivers (driver_id, driver_name)
VALUES (101, 'Alex'), (102, 'Tom'),(103, 'Trevor');
我创建了一个 SQL Fiddle,但默认情况下 SQL Fiddle 没有存储 seq_0_to_999999 表。我正在使用最新版本的 MariaDB。
如果您安装了 MariaDB,您可以在本地计算机上复制上述表格和 SQL 语句。
基本上,在代码中,如果驱动程序在给定日期关闭,我将使用 in_array 函数从可用性框中删除驱动程序。我试图通过 1 个查询来实现这一点,它检索一周的空天数或驱动程序关闭的位置。目前,查询仅在给定日期有条目时才有效,问题是,如果结束日期尚未结束,则查询不会继续。
这是一个执行当前查询的好例子。如果您查看下面的屏幕,马里奥会在 2019 年 1 月 1 日之前关闭,但第 19、20、21、22 和 23 天是空白的,并且没有说出他的名字。他们可能需要在某个地方进行 CROSS JOIN - 逻辑思考!
任何帮助将不胜感激,并感谢您超时!
【问题讨论】:
-
我担心您将数据存储和检索问题与数据显示问题混为一谈。
-
如果您仍在苦苦挣扎,那么给定参数集的预期结果可能会很有用
-
我刚刚上传了我正在处理的当前系统的视图,我已经解释了我的意思。我的目标是对其进行编辑以描述结果。
-
我刚刚添加了结果集;它正在输出什么以及它应该做什么。
-
数据集和结果集之间没有任何关系
标签: mysql sql database mariadb