Intanto grazie per la risposta.
La mia situazione è questa: ipotizziamo una gestione di magazzino con carichi (rifornimenti) e scarichi (vendite) degli articoli.
Ho creato una tabella "magazzino" in cui sono memorizzate entrambe le azioni
Snapshot_3.jpg
Nella fattispecie, quando si tratta di un carico, mi ritrovo con una situazione del genere:
Snapshot_4.jpg
Nel caso di uno scarico, la situazione è questa:
Snapshot_5.jpg
(da notare che idTipologiaMovimento è una chiave esterna ad una tabella in cui sono memorizzati i due tipo di movimento possibili, 1 è l'id relativo al carico, 2 allo scarico)
A seconda del tipo di movimento, insomma, restano NULL alcune colonne piuttosto che altre. Da notare che nel caso dello scarico c'è il riferimento al codiceOrdine, che è un collegamento 1 a molti verso la tabella ordini dalla quale prelevo i dettagli relativi ad un acquisto (id prodotti, relativa quantità e prezzo).
Concettualmente ordini dovrebbe essere ok, il mio dubbio è unicamente nel calderone che ho creato in magazzino in cui ho messo sia i carichi che gli scarichi laddove potrei creare tabelle distinte.
Allo stato attuale mettiamo che io voglia prelevare tutti gli articoli e calcolarne la disponibilità (il numero di pezzi rimanenti) in base ai carichi e gli scarichi, esce una cosa del genere:
Codice PHP:
SELECT *,
SUM( IF(magazzino.idTipologiaMovimento=2, -magazzino.quantita, magazzino.quantita) - IFNULL(ordini.quantita,0) ) AS disponibilita
FROM catalogo
JOIN articoli ON catalogo.Articoli_IDArticoli=articoli.ID
JOIN categorie ON categorie.ID=articoli.Categoria_IDCategoria
JOIN magazzino ON magazzino.idArticolo=articoli.ID
LEFT JOIN ordini on (magazzino.idArticolo=ordini.idArticolo AND idTipologiaMovimento=2)
Il progetto funziona, ma mi rendo conto che è poco intuitivo come struttura