Tato odpověď je myšlena pouze jako směr řešení pro část plánu, nikoli jako 100% pěkné řešení:
To, co jste vytvořili, vyžaduje smyčky, aby bylo možné splnit všechny podmínky.
Aby byl takový případ vyřešen rychleji, může být praktické pracovat s vektory, ve kterých jsou všechny pozice ve vektoru reprezentovány 0 (dostupné) a 1 (obsazeno).
Takže problém student/matematika-1:
Řekněme, že existují 2 místnosti a 3 hodiny:Matematický vektor 1 na místnost je pak:
Room 1: [0 0 0]
Room 2: [0 0 0]
V podstatě (alespoň mě) je jedno, zda je určitý pokoj k dispozici, pokud je k dispozici 1:V tomto případě by tedy odpovědí na dostupnost mohl být AND za index (nezapomeňte:0 je k dispozici):
Místnost 1:[1 0 0] Místnost 2:[0 0 0] Výsledek místnosti:[1 0 0] A [0 0 0]=[0 0 0]
Takže AND může zjistit, zda je první hodina stále k dispozici.
Pokud to nyní zkombinujete se studentem s dostupnými hodinami (také pouze 3 pro tento příklad):
Student A:[0 0 1]Výsledek místnosti:[0 0 0]Student odpovídá místnosti pomocí OR pro tuto operaci:[0 0 1] NEBO [0 0 0]=[0 0 1]
Takže student A by odpovídal výsledku místnosti.
V SQL:Datový model (část:Chybí shoda kurzu):Tabulka:
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
)
Všechna data byla vložena do tabulek v plném rozsahu:V tomto případě 1 pokoj, 3 hodiny, 3 místa k dispozici.
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);
Student má:
INSERT INTO student VALUES(1,0,1);
INSERT INTO student VALUES(1,0,2);
INSERT INTO student VALUES(1,1,3);
Student je tedy k dispozici pouze v prvních dvou hodinách.
Chcete-li nyní získat výsledek z dotazu:
SELECT room_id
FROM room a
INNER JOIN student b ON a.space=b.space AND a.hour=b.hour;
Tento výsledek stačí rozdělit do skupin maximálně 8, ve kterých je konec části SQL a čas pro další programovací jazyk.
Tento model lze rozšířit o datum, ale nejlépe funguje při použití pouze hodin a pracovních dnů (dostupnost ve všední dny je opět 0 nebo 1).
Jak jsem uvedl:toto je koncept/nápad, nikoli 100% řešení, takže je třeba zapracovat, než jej budete moci použít.....