Buongiorno, devo provare a creare una sorta di magazzino fatto a caselle, le quali hanno ognuna 3 coordinate che le fanno diventare uniche.
Ogni casella di questo "magazzino" avr� le coordinata X, Y e Z.
X va da 1 a 5
Y va da 1 a 5
Z va da 1 a 2
Ho previsto oltre a questi 3 campi, un campo ID per evitare di dover leggere tutte e 3 le coordinate ed un campo Occupata, cos� da sapere se pu� essere utilizzata o no la casella.
Mi sto scervellando per trovare un metodo per poter trovare velocemente il numero di caselle che mi servono.
Praticamente queste caselle vengono occupate e io devo decidere quali.
Se un articolo come dimensione occupa una sola casella, quando dovr� inserirlo, mi baster� cercare la prima casella libera.
Ogni articolo per� pu� occupare pi� caselle in X o in Z o in X e Z, mai in Y.
La cosa importante � che se l'articolo occupa pi� caselle, queste devono essere consecutive.
Quindi per fare capire, la tabella pu� essere rappresentata cos�:
codice:
ID - X - Y - Z - Occupato
1 1 1 1 1
2 1 1 2 0
3 2 1 1 0
4 2 1 2 0
5 3 1 1 0
6 3 1 2 0
7 4 1 1 0
8 4 1 2 0
9 5 1 1 0
10 5 1 2 0
11 1 2 1 0
12 1 2 2 0
Per fare un esempio, se occupa 1 casella in X ed entrambe (dato che al massimo possono essere 2) in Z, dovr� cercare la prima coppia di caselle tenendo conto solo di X-Y che hanno Occupato = NULL, quindi usando la tabella, dovr� selezionare la coppia X = 2, Y = 1.
Per farlo, ho utilizzato questo codice:
codice:
SELECT DISTINCT X, Y FROM Caselle c1
WHERE NOT EXISTS (SELECT X, Y
FROM Caselle c2
WHERE Occupato IS NOT NULL AND c1.X = c2.X AND c1.Y = c2.Y)
In questo modo, prima cerco le caselle occupate (dato che in questo caso non potr� pi� utilizzare l'altra Z anche se fosse libera) e vado ad escluderle dalla selezione totale.
Ora per� dovrei fare pi� o meno la stessa cosa, ma per la X e X-Z.
Quindi, ipotizzando che l'articolo occupi 3 caselle in X e 1 in Z, dovr� trovare, per esempio, le caselle con ID = 2, 4, 6 oppure ID = 3, 5, 7.
La stessa cosa dovrei poterla fare nel caso in cui l'articolo occupi 3 caselle in X e 2 in Z, quindi dovrei integrare i due metodi ed avere come risultato le caselle con ID = 3, 4, 5, 6, 7, 8.
Spero di essere stato chiaro!
Se qualcuno sapesse aiutarmi, sarebbe molto apprezzato