Dette svar er kun ment som en løsningsvejledning for skemadelen, ikke en 100 % god løsning:
Det du har lavet, kræver loops for at kunne opfylde alle betingelser.
For at få en sådan sag løst hurtigere, kan det være praktisk at arbejde i vektorer i stedet, hvor alle positioner i vektoren er repræsenteret med 0 (tilgængelig) og 1 (optaget).
Så elev/matematik-1 problemstillingen:
Lad os sige, at der er 2 rum og 3 timer:Math-1 vektoren pr. værelse er så:
Room 1: [0 0 0]
Room 2: [0 0 0]
Grundlæggende (jeg er i hvert fald) ligeglad med, om et bestemt værelse er ledigt, så længe 1 er tilgængeligt:Så et OG pr. indeks kunne være svaret i dette tilfælde for tilgængelighed (husk:0 er tilgængelig):
Rum 1:[1 0 0]Rum 2:[0 0 0]Rumresultat:[1 0 0] OG [0 0 0]=[0 0 0]
Så en AND kan fortælle om den første time stadig er ledig.
Hvis du nu kombinerer dette med en elev med de ledige timer (også kun 3 for dette eksempel):
Elev A:[0 0 1]Rumresultat:[0 0 0]Elev matcher med værelse ved hjælp af en OR til denne operation:[0 0 1] OR [0 0 0]=[0 0 1]
Så elev A ville matche rummets resultat.
I SQL:Datamodellen (del:Mangler er kursusmatchet):Tabelrum:
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
)
Alle data er blevet indsat i tabeller fuldt ud:I dette tilfælde 1 rum, 3 timer, 3 ledige pladser.
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);
Eleven har:
INSERT INTO student VALUES(1,0,1);
INSERT INTO student VALUES(1,0,2);
INSERT INTO student VALUES(1,1,3);
Så eleven er kun tilgængelig i de første to timer.
For nu at få et resultat fra en forespørgsel:
SELECT room_id
FROM room a
INNER JOIN student b ON a.space=b.space AND a.hour=b.hour;
Dette resultat skal kun opdeles i grupperne på maksimalt 8, hvor det er slutningen af SQL-delen og tiden for et andet programmeringssprog.
Denne model kan udvides med en dato, men den fungerer bedst, når der kun bruges timer og hverdage (tilgængelighed på ugedage er igen 0 eller 1).
Som jeg sagde:dette er et koncept/idé, ikke en 100% løsning, så det kræver arbejde, før du kan bruge det.....