Този отговор е предназначен само като посока на решение за частта от графика, а не като 100% хубаво решение:
Това, което сте създали, изисква цикли, за да може да удовлетвори всички условия.
За да се реши такъв случай по-бързо, може да бъде практично да се работи във вектори, в които във вектора всички позиции са представени с 0 (налични) и 1 (заети).
И така, проблемът за студент/математика-1:
Да кажем, че има 2 стаи и 3 часа:Векторът по математика-1 на стая е след това:
Room 1: [0 0 0]
Room 2: [0 0 0]
По същество (поне мен) не ме интересува дали дадена стая е налична, стига 1 да е налично:Така че И за индекс може да бъде отговорът в този случай за наличност (не забравяйте:0 е налично):
Стая 1:[1 0 0] Стая 2:[0 0 0] Резултат от стая:[1 0 0] И [0 0 0]=[0 0 0]
Така че И може да каже дали първият час все още е наличен.
Ако сега комбинирате това с ученик с наличните часове (също само 3 за този пример):
Ученик A:[0 0 1] Резултат от стаята:[0 0 0] Студент съвпада със стая, използвайки ИЛИ за тази операция:[0 0 1] ИЛИ [0 0 0]=[0 0 1]
Така ученикът А ще съвпадне с резултата от стаята.
В SQL:Моделът на данните (част:Липсва е съвпадението на курса):Стая за маса:
CREATE TABLE room(
room_id INT,
space TINYINT DEFAULT 0,
hour INT DEFAULT 1
);
CREATE TABLE student(
student_id INT,
space TINYINT DEFAULT 0,
hour INT DEFAULT 1
)
Всички данни са вмъкнати в таблици изцяло:В този случай 1 стая, 3 часа, 3 свободни места.
INSERT INTO room VALUES (1,0,1);
INSERT INTO room VALUES (1,0,1);
INSERT INTO room VALUES (1,0,1);
INSERT INTO room VALUES (1,0,2);
INSERT INTO room VALUES (1,0,2);
INSERT INTO room VALUES (1,0,2);
INSERT INTO room VALUES (1,0,3);
INSERT INTO room VALUES (1,0,3);
INSERT INTO room VALUES (1,0,3);
Студентът има:
INSERT INTO student VALUES(1,0,1);
INSERT INTO student VALUES(1,0,2);
INSERT INTO student VALUES(1,1,3);
Така че ученикът е на разположение само през първите два часа.
За да получите резултат от заявка:
SELECT room_id
FROM room a
INNER JOIN student b ON a.space=b.space AND a.hour=b.hour;
Този резултат трябва само да бъде разделен на групи от максимум 8, в които това е краят на SQL частта и времето за друг език за програмиране.
Този модел може да бъде разширен с дата, но работи най-добре, когато се използват само часове и делнични дни (наличността от делнични дни отново е 0 или 1).
Както казах:това е концепция/идея, а не 100% решение, така че се нуждае от работа, преди да можете да го използвате.....