Выберите столбцы на основе условия - PullRequest
0 голосов
/ 28 июня 2018
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) = 'понедельник'.

Для более подробной информации столбцы, которые я хотел выбрать, основаны на дне.

Допустим, если сегодня понедельник, мне нужно только выбрать class_day_ (n) _type, start_time_ (n), end_time_ (n) на основе class_day_ (n), который должен содержать «Monday».

Если 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 голосов
/ 28 июня 2018

ИМХО сначала нужно немного изменить свою схему. Давайте преобразовать вашу таблицу в следующую структуру:

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`);

Я думаю, что в этом случае вы можете легко написать свой запрос. Что-то вроде

SELECT stu_id,class_id,semester,day_id,class_day,class_day_type,start_time,end_time
FROM stu_enrollment
WHERE class_day='Monday'
ORDER by day_id

И последний совет. Читайте о нормализации базы данных.

0 голосов
/ 28 июня 2018

Я хотел бы предложить вам, что вам нужно улучшить дизайн вашей базы данных. Ваша база данных сейчас так грязно. Попробуйте посмотреть несколько видео о нормализации. Вы можете сделать это лучше. Удачи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...