Query differenza tra tabelle

Emanuele85

Utente Attivo
30 Gen 2021
118
0
16
Buongiorno a tutti, volevo chiedervi aiuto per una piccola query che devo creare ma non riesco a venirne fuori, o meglio, vorrei trovare il metodo migliore per farla (e per imparare). In pratica ho due tabelle, ordini e produzioni. Nella tabella delle produzioni ci vado ad inserire i dati relativi alla produzione giornaliera, mentre su ordini, ad inizio mese imposto degli obiettivi di produzione, e vorrei che questo dato venisse aggiornato di volta in volta che apro la mia pagina Php.

Es.

Tab Ordini:

Cod. Particolare Tot. Pz

001 11500
002 10000
003 12000

Tab. Produzioni

Data cod particolare pz.prodotti
01-01-2023 001 200
01-01-2023 002 150
02-01-2023 001 150
02-01-2023 001 300

Spero si capisca, in pratica la query dovrebbe leggere gli ordini impostati e cercare (sommare) nella produzione tutti i pz.prodotti relativi a quel codice del mese in corso. Nell'esempio dovrebbe venire fuori che del cod 001 mancano (11500-200-150-300) e del codice 002 mancano (10000-150).

Potrei incasinarmi con variabili,cicli e Php, ma sono certo che esiste un modo piu corretto e lineare utilizzando Mysql.
Sapete darmi una mano please?

Grazie a tutti e buona domenica
E
 
Buonasera a tutti, scusate il disturbo, volevo solo aggiornarvi... dopo varie prove sono riuscito a tirare fuori qualcosa di utile, ma magari se date uno sguardo ditemi se ci sono soluzioni migliori:

SQL:
SELECT     codice_lavorazione,
            SUM(n_pz_ok)  AS tot,
            ordini.pezzi_ordine AS ordine,
           (ordini.pezzi_ordine-SUM(n_pz_ok)) AS differenza,
            lavorazioni.cod_lavorazione
            
FROM riepoligo_lavorazioni

LEFT JOIN ordini ON ordini.id_lavorazione_ordine=riepoligo_lavorazioni.codice_lavorazione
LEFT JOIN lavorazioni ON lavorazioni.id_lavorazione=riepoligo_lavorazioni.codice_lavorazione

WHERE codice_lavorazione IN (SELECT id_lavorazione_ordine FROM ordini)

GROUP BY codice_lavorazione

Sembra funzionare, ma devo testarla per bene. Cosa ne pensate? è corretto?

Grazie a tutti
 
Eccomi... buongiorno a tutti, la query come dicevo funziona, ma ho notato che se creo l'ordine e ho il rispettivo rapportino tutto funziona correttamente, ma se non ho alcun rapportino relativo a quel codice non vedo neppure l'ordine creato, invece mi servirebbe vederlo comunque. Continuerò con qualche test e vi aggiorno, nel frattempo se avete info...sono ben accette. Grazie mille
E
 
vedi se ti garba questo codice
SQL:
select Cod_Particolare, sum(Tot_Pz) as Tot_Pz, sum(pz_prodotti) as pz_prodotti, sum(Tot_Pz)-sum(pz_prodotti) as pz_differenza
from (
  select Cod_Particolare,
         Tot_Pz,
         0 as pz_prodotti
  from ordini
  UNION ALL
  select Cod_Particolare,
         0 as Tot_Pz,
         pz_prodotti
  from produzioni
) tab
group by Cod_Particolare
 
vedi se ti garba questo codice
SQL:
select Cod_Particolare, sum(Tot_Pz) as Tot_Pz, sum(pz_prodotti) as pz_prodotti, sum(Tot_Pz)-sum(pz_prodotti) as pz_differenza
from (
  select Cod_Particolare,
         Tot_Pz,
         0 as pz_prodotti
  from ordini
  UNION ALL
  select Cod_Particolare,
         0 as Tot_Pz,
         pz_prodotti
  from produzioni
) tab
group by Cod_Particolare

Ciao Marino, farò ancora qualche prova ma non riesco a farlo girare. Ti riporto di seguito i campi "reali" delle tabelle, in modo che riesci a capire cosa non riesco a fare:

ordini
codice_ordine
id_lavorazione_ordine
pezzi_ordine


riepilogo_lavorazioni
data_lavorazione
codice_lavorazione
n_pz_ok

In pratica devo visualizzare tutti gli ordini, e per tutti gli ordini che trovano riscontro nella tabella riepilogo_lavorazioni (ordini.id_lavorazione_ordine=codice_lavorazione) devo calcolare quanti pezzi mancano per raggiungere l'ordine impostato "sum(riepilogo_lavorazioni.n_pz_ok)-ordini.pezzi_ordine"

Spero di essere stato un po più chiaro.
Il mio codice funzionava, ma visualizzava SOLO gli ordini che trovano riscontro nella tabella riepilogo_lavorazioni.

Grazie mille per l'interesse!
E
 
Marino questa sembra funzionare, sicuramente non è il massimo, non mette gli zeri nel caso in cui non c'è corrispondenza tra le due tabelle, ma al momento faccio fare questo lavoro a php. Se hai info utili...sono ben accette.
Di seguito il codice che sto utilizzando:

SQL:
SELECT     ordini.id_lavorazione_ordine,
            SUM(riepoligo_lavorazioni.n_pz_ok)  AS tot,
            ordini.pezzi_ordine AS ordine,
           (ordini.pezzi_ordine-SUM(n_pz_ok)) AS differenza,
            lavorazioni.cod_lavorazione
            
FROM ordini

LEFT JOIN riepoligo_lavorazioni ON ordini.id_lavorazione_ordine=riepoligo_lavorazioni.codice_lavorazione
LEFT JOIN lavorazioni ON lavorazioni.id_lavorazione=ordini.id_lavorazione_ordine

WHERE MONTH(ordini.data_inizio_ordine)=MONTH(NOW())

GROUP BY id_lavorazione_ordine

Grazie
E
 

Discussioni simili