【发布时间】:2012-07-16 15:02:09
【问题描述】:
我正在做一个小项目,有点像技术人员的议程,每个技术人员都有一个日常议程。
我正在寻找一个查询,它只显示一个分支(公司有两个分支:东部和西部)中一天没有分配的技术人员
我试过的查询是:
SELECT *
FROM technicians
WHERE id_tech NOT
IN (
SELECT id_tech
FROM hours
)
AND branch = 'West'
这个查询返回我想要的,但我不知道如何用日期过滤它,我尝试了很多查询,并返回所有具有重复结果的列。
我的表是,每个技术人员都有任务的小时表:
CREATE TABLE IF NOT EXISTS `hours` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_tech` int(11) NOT NULL,
`9_30` varchar(140) DEFAULT NULL,
`10_30` varchar(50) DEFAULT NULL,
`11_30` varchar(50) DEFAULT NULL,
`12_30` varchar(50) DEFAULT NULL,
`1_30` varchar(50) DEFAULT NULL,
`2_30` varchar(50) DEFAULT NULL,
`3_30` varchar(50) DEFAULT NULL,
`4_30` varchar(50) DEFAULT NULL,
`5_30` varchar(50) DEFAULT NULL,
`6_30` varchar(50) DEFAULT NULL,
`comments` varchar(50) DEFAULT NULL,
`date` text NOT NULL,
PRIMARY KEY (`id`)
) TYPE=MyISAM ROW_FORMAT=DYNAMIC;
INSERT INTO `hours` (`id`, `id_tech`, `9_30`, `10_30`, `11_30`, `12_30`, `1_30`, `2_30`, `3_30`, `4_30`, `5_30`, `6_30`, `comments`, `date`) VALUES
(1, 1, 'Router with problems, Customer ID 111', 'Router with problems, Customer ID 111', 'Router with problems, Customer ID 111', 'Router with problems, Customer ID 111', 'Router with problems, Customer ID 111', 'Desktop with problems, Customer ID 121', NULL, NULL, NULL, 'Network problems, Customer ID 121', 'Router with problems, Customer ID 111', '16-07-2012'),
(3, 3, 'Network with problems, Customer ID 111', 'Network with problems, Customer ID 111', NULL, NULL, NULL, NULL, NULL, NULL, 'Network with problems, Customer ID 111', '', 'Didn''t came to work today', '16-07-2012');
还有技术员表:
CREATE TABLE IF NOT EXISTS `technicians` (
`id_tech` int(11) NOT NULL,
`name` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
`branch` varchar(50) COLLATE utf8_spanish_ci NOT NULL,
PRIMARY KEY (`id_tech`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci ROW_FORMAT=DYNAMIC;
INSERT INTO `technicians` (`id_tech`, `name`, `branch`) VALUES
(1, 'Peter', 'East'),
(2, 'Juan', 'East'),
(3, 'Rick', 'West'),
(4, 'Mario', 'West');
【问题讨论】:
-
只是评论一下表结构的选择。所有
6_30、7_30等列的意义何在?为什么不只创建一个“时间”列,以便在 6:52 发生某些事情时,您可以记录正确的时间? -
“9_30”“10_30”是时间间隔,其想法是在每个单元格上添加一项技术任务,可能在同一天或将来添加,也是估计技术人员需要多长时间才能解决问题,感谢您的评论:)
-
那么如果在该时间间隔内有 4 个短任务要做呢?如果任务花费的时间超过一个时间间隔,比如 1.5 个时间间隔怎么办?