php - MYSQL + php,避免日期冲突
问题描述
我有一个数据库,其中包含诸如“狂欢节......
+-------------------+------------+---------------+-----------------------+
+ Name + Date + action starts + action duration (min) +
+-------------------+------------+---------------+-----------------------+
+ Carneval + 2018-04-30 + 12:00:00 + 150 +
+-------------------+------------+---------------+-----------------------+
+ Fairytale evening + 2018-04-30 + 20:00:00 + 200 +
+-------------------+------------+---------------+-----------------------+
我如何避免在 2018 年 4 月 30 日的 11:58:00 或 13:00:00 将诸如“尽你所能”之类的动作放入数据库?因为在本例中,这些时间显然与其他动作(如狂欢节)相冲突。 .
我正在使用 PHP 在表中插入数据...
解决方案
DROP TABLE IF EXISTS my_table;
CREATE TABLE my_table
(event_id SERIAL PRIMARY KEY
,name VARCHAR(12) NOT NULL
,start_dt DATETIME NOT NULL
,end_dt DATETIME NULL
);
INSERT INTO my_table VALUES
(1, 'Carnival', '2018-04-30 12:00:00','2018-04-30 12:00:00'+INTERVAL 150 MINUTE),
(2, 'Fairytale','2018-04-30 20:00:00','2018-04-30 20:00:00'+INTERVAL 200 MINUTE);
SELECT * FROM my_table;
+----------+-----------+---------------------+---------------------+
| event_id | name | start_dt | end_dt |
+----------+-----------+---------------------+---------------------+
| 1 | Carnival | 2018-04-30 12:00:00 | 2018-04-30 14:30:00 |
| 2 | Fairytale | 2018-04-30 20:00:00 | 2018-04-30 23:20:00 |
+----------+-----------+---------------------+---------------------+
INSERT INTO my_table (name,start_dt,end_dt)
SELECT 'Whatever','2018-04-20 11:58:00','2018-04-30 13:00'
FROM (SELECT 1) x
LEFT
JOIN my_table y
ON y.end_dt > '2018-04-30 11:58:00'
AND y.start_dt < '2018-04-30 13:00:00'
WHERE y.event_id IS NULL;
SELECT * FROM my_table;
+----------+-----------+---------------------+---------------------+
| event_id | name | start_dt | end_dt |
+----------+-----------+---------------------+---------------------+
| 1 | Carnival | 2018-04-30 12:00:00 | 2018-04-30 14:30:00 |
| 2 | Fairytale | 2018-04-30 20:00:00 | 2018-04-30 23:20:00 |
+----------+-----------+---------------------+---------------------+
推荐阅读
- sql - 为什么我的 CROSS APPLY 列没有显示?
- teradata - 3706 teradata 中的语法错误预期在 ')' 和 'AS' 关键字之间
- javascript - 插入已填充空数组的二维数组的行时,元素被添加到每一行
- json - 如何使用 Azure 数据工厂管道将嵌套的 JSON 对象映射到 SQL Server 表
- jax-rs - 如何接受任意 JSON 对象?
- odata - 如何展开嵌套的 odata 表
- flutter - 继承后的类构造函数
- logic - 返回逻辑如何工作 ERROR = '1'; 成功 = '0';
- accounting - BankEntryLine 的精确更改 GLAccount
- postgresql - Postgres DB Schema - 多列 vs 一个 json 列