CREATE TABLE `stu_enrollment` (
`stu_id` int(11) NOT NULL,
`class_id` int(11) NOT NULL,
`class_day_1` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`class_day_1_type` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`start_time_1` time NOT NULL,
`end_time_1` time NOT NULL,
`class_day_2` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`class_day_2_type` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`start_time_2` time NOT NULL,
`end_time_2` time NOT NULL,
`class_day_3` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`class_day_3_type` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`start_time_3` time NOT NULL,
`end_time_3` time NOT NULL,
`semester` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
INSERT INTO `stu_enrollment` (`stu_id`, `class_id`, `class_day_1`, `class_day_1_type`, `start_time_1`, `end_time_1`, `class_day_2`, `class_day_2_type`, `start_time_2`, `end_time_2`, `class_day_3`, `class_day_3_type`, `start_time_3`, `end_time_3`, `semester`) VALUES
(115527, 123, 'Monday', 'Normal', '10:00:00', '12:00:00', 'Tuesday', 'Normal', '08:00:00', '10:00:00', 'Saturday', 'Blended Learning', '08:00:00', '14:00:00', '1899');
ALTER TABLE `stu_enrollment`
ADD PRIMARY KEY (`stu_id`,`class_id`,`semester`);
COMMIT;
我有这张桌子,其中包含3个不同的上课日。 选择语句或任何仅允许我选择的查询 stu_id,class_id,class_day_(n),class_day_(n)_type,start_time_(n),end_time_(n),其中class_day_(n)='Monday'。
为更清楚地了解详细信息,我要选择的列是基于日期的。
假设,如果今天是星期一,我只需要选择 class_day_(n)_type,start_time_(n),end_time_(n)基于 class_day_(n)必须包含“星期一”。
如果class_day_1是星期一,那么我只会选择class_day_1_type, start_time_1&end_time_1;
如果class_day_2是星期一,那么我只选择class_day_2_type, start_time_2&end_time_2;
如果class_day_1和class_day_2都是星期一,那么我选择 class_day_1_type,start_time_1,end_time_1,class_day_2_type, start_time_2&end_time_2;
感谢您的帮助,我认为这很复杂,谢谢您为我提供了一个很好的建议。
答案 0 :(得分:1)
恕我直言,首先您需要稍微修改一下方案。让我们将表转换为下一个结构:
function generate_uuid(array $ids_from_database, int $needed_new_ids = 1, int $random_bytes_length = 6)
{
$temp = $ids;
$needed_ids_num = count($ids) + $needed_ids;
while (count($ids) < $needed_ids_num) {
$id = bin2hex(random_bytes($random_bytes_length));
if (!isset($ids[$id])) $ids[$id] = true;
}
$ids = array_keys($ids);
$result = array_diff($ids, $temp);
return [
'new_uuid' => $result,
'ids' => $ids
];
}
我认为在这种情况下,您可以轻松编写查询。像
CREATE TABLE `stu_enrollment` (
`stu_id` int(11) NOT NULL,
`class_id` int(11) NOT NULL,
`semester` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`day_id` int(1) NOT NULL,
`class_day` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`class_day_type` varchar(191) COLLATE utf8mb4_unicode_ci NOT NULL,
`start_time` time NOT NULL,
`end_time` time NOT NULL
)
ALTER TABLE `stu_enrollment` ADD PRIMARY KEY (`stu_id`,`class_id`,`semester`);
最后一条建议。了解有关数据库规范化的信息。
答案 1 :(得分:0)
我想建议您,您需要更好地设计数据库。您的数据库现在是如此混乱。尝试观看一些有关规范化的视频。您可以做得更好。祝你好运。