根据条件选择列

时间:2018-06-28 02:35:22

标签: mysql database

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;

感谢您的帮助,我认为这很复杂,谢谢您为我提供了一个很好的建议。

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)

我想建议您,您需要更好地设计数据库。您的数据库现在是如此混乱。尝试观看一些有关规范化的视频。您可以做得更好。祝你好运。