Я бы не сказал, что вам НЕОБХОДИМО сделать что-либо, но я думаю, что вы в конечном итоге найдете нормализацию, это очень хорошая идея здесь. http://en.wikipedia.org/wiki/Database_normalization
вы, вероятно, хотите таблицы для:
student (id, name, whatever)
course (id, name, subject/dept)
section (id, course id and time info)
student_to_section (student id, section id)
Время зависит. Вы можете поместить время старта/завершения в разделы (метки времени SQL или целые числа времени unix будут в порядке) или сохранить таблицу временных интервалов с уникальным идентификатором (тогда разделы будут иметь только внешний ключ для этого идентификатора). EDIT: звучит так, как будто вы выбрали второй способ
Что касается вашего свободного времени, найдите время, в течение которого все разделы, сделанные студентом, и свободное время - это то, что осталось. Ниже приводятся временные блоки, в которых учащийся является BUSY.
SELECT T.*
FROM section S
INNER JOIN time_blocks T on S.time_id = T.id
INNER JOIN student_to_section STS on STS.section_id = S.id
WHERE STS.student_id = ###
Для свободного времени, использование:
SELECT T2.*
FROM time_blocks T2
WHERE T2.id NOT IN
(put above statement here)
К сожалению, я забыл упомянуть, что у меня есть другая таблица, которая определяет блоки. – nickles
Это учебник, который я нашел полезным. http://www.tonymarston.net/php-mysql/many-to-many.html – dgig
+1 для свободного времени как класса, потому что тогда вы можете выполнять вычисления на нем (всего, avg и т. д.), которые вы не можете, если вы опускаете это, как и другой ответ: – Drew