Info relazione tabelle

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
Buonasera a tutti, sto tenendo vivo questo forum con i miei dubbi e problemi :p. Volevo chiedervi una cosa semplice semplice. Ho tre tabelle, abbastanza semplici, una con delle lavorazioni (id,nome...........ecc), unacon gli ordini (id_lavorazione pezzi_ordinati ecc ecc) e l'ultima con i rapportini di produzione (id_lavorazione, pz_prodotti ecc ecc)

La mia esigenza è quella di visualizzare tutti gli ordini del mese, e laddove trovo una produzione vado a sommare i pezzi prodotti e gli vado a scalare dal totale degl'ordini,al contrario, se non ho rapportini vado semplicemente a riportare i dati dell'ordine. La query che riporto di seguito funziona benissimo, ed ero soddisfattissimo, fino a quando mi sono accorto che se l'ordine non ha ALMENO un rapportino agganciato non viene visualizzato in tabella.

La query è la seguente:

SQL:
SELECT     ordini.id_ordine,
        ordini.id_lavorazione_ordine,       
        ordini.pezzi_ordine AS ordine,
        (ordini.pezzi_ordine-SUM(n_pz_ok)) AS differenza,
        SUM(riepoligo_lavorazioni.n_pz_ok)  AS tot,                         
        riepoligo_lavorazioni.n_pz_ok,
        SUM(riepoligo_lavorazioni.n_pz_ok)*lavorazioni.prezzo_lavorazione AS euro_prodotti,
        lavorazioni.cod_lavorazione,
        lavorazioni.pz_ora,
        lavorazioni.tipologia_lavorazione,       
       ((ordini.pezzi_ordine-SUM(n_pz_ok))* lavorazioni.prezzo_lavorazione) AS euro_mancanti

 FROM riepoligo_lavorazioni

 LEFT JOIN ordini 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())
 AND MONTH(riepoligo_lavorazioni.data_lavorazione)=MONTH(NOW())
 AND lavorazioni.tipologia_lavorazione=:tipo_ordine
 GROUP BY id_lavorazione_ordine

Il principio è semplice, ad inizio mese imposto gli ordini e man mano che vengono registrati i rapportini di lavorazione vado a scalare i pezzi totali da produrre.

Mi sapete dire dove sto sbagliando? ho fatto varie prove...ma niente.

Grazie a tutti
E
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
hai provato nelle 2 join a sostituire "left" con "full outer" ?
cosa succede ?
Marino ti aspettavo come al pane...se il mio mentore... In realtà ho provato tante soluzioni ma nessuna ha dato il risultato sperato... credo sia semplice ma mi sono perso...help meee please
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
hai provato nelle 2 join a sostituire "left" con "full outer" ?
cosa succede ?
Mi dà errore. Ma comunque credo...e dico credo che dovrei ricercare principalmente in "ordini" (from ordini) e da lì vedere se ho relazioni nella tabella dei rapportini (per vedere se ci sono lavorazioni per quel codice prodotto ed eventualmente sommare i pezzi prodotti). Cosa ne pensi?
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
quale ????


comunque prova

FULL OUTER JOIN ordini ON ordini.id_lavorazione_ordine=riepoligo_lavorazioni.codice_lavorazione
FULL OUTER lavorazioni ON lavorazioni.id_lavorazione=ordini.id_lavorazione_ordine

cosa succede ?
Mi dava errore di sintassi prima di outer. Comunque appena rientro faccio altro test e ti aggiorno. Ma la logica è corretta secondo te? Ho il dubbio sulla "From"… ma non riesco a venirne fuori, eppure credo sia semplice come principio.
Grazie infinite per l'aiuto
E
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
posta la struttura delle tabelle e alcuni record d'esempio in modo da provare il codice

per chiarezza,
ordini : sono gli ordini dei materiali da produrre
lavorazioni : sono tutte le lavorazioni necessarie ad ottenere un materiale finito
riepoligo_lavorazioni : sono i materiali già prodotti

da ultimo
le relazioni tra ordini -> lavorazioni
le relazioni tra ordini -> riepoligo_lavorazioni
le relazioni tra lavorazioni -> riepoligo_lavorazioni
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
Tab. Lavorazioni (contiene i dettagli delle lavorazioni)
id_lavorazioni
tipologia_lavorazione
cod_lavorazione
pz_ora

Tab. Ordini (contiene gli ordini mensili)
id_ordine
id_lavorazione_ordine
pezzi_ordine
data_inizio_ordine

Tab. Riepilogo_lavorazioni (contiene i rapportini dei dipendenti giornalieri)
data_lavorazione
tipologia_lavorazione
codice_lavorazione
n_pz_ok
n_pz_ko



Tab Lavorazioni tab ordini Tab Riepilogo_lavorazioni
00000001 215648569 01/01/2023
fin_man 00000001 fin_man
1xtn000005 1000 1xtn000005
25 01/09/2023 200


Spero si capisca il concetto.

Grazie mille
E

o postato 1 estratto delle tabelle. Spero di risolvere questo problema. Pensavo fosse una banalità... perdona il disturbo
E
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
Forse cosi ti è tutto piu semplice, ti allego il codice sql per la creazione delle tabelle, spero che riesci ad aiutarmi
 

Allegati

  • sql_tmp.txt
    19,2 KB · Visite: 45

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
1695037155359.png

ho estratto tutte le colonne delle 3 tabelle in modo che tu le possa controllare,
con questa query

SQL:
select
  o.id_ordine              as o_id_ordine
, o.id_lavorazione_ordine  as o_id_lavorazione_ordine
, o.pezzi_ordine           as o_pezzi_ordine
, o.data_inizio_ordine     as o_data_inizio_ordine
, l.id_lavorazioni         as l_id_lavorazioni
, l.tipologia_lavorazione  as l_tipologia_lavorazione
, l.cod_lavorazione        as l_cod_lavorazione
, l.pz_ora                 as l_pz_ora
, r.tipologia_lavorazione  as r_tipologia_lavorazione
, r.codice_lavorazione     as r_codice_lavorazione
, sum (r.n_pz_ok)          as n_pz_ok
, sum (r.n_pz_ko)          as n_pz_ko
from @Lavorazioni l
left join @Riepilogo_lavorazioni r
on l.tipologia_lavorazione = r.tipologia_lavorazione and l.cod_lavorazione = r.codice_lavorazione
and r.data_lavorazione BETWEEN '2023-01-01' AND '2023-12-31'
left join @ordini o
on l.id_lavorazioni = o.id_lavorazione_ordine
group by
  o.id_ordine
, o.id_lavorazione_ordine
, o.pezzi_ordine
, o.data_inizio_ordine
, l.id_lavorazioni
, l.tipologia_lavorazione
, l.cod_lavorazione
, l.pz_ora
, r.tipologia_lavorazione
, r.codice_lavorazione
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
Vedi l'allegato 8212
ho estratto tutte le colonne delle 3 tabelle in modo che tu le possa controllare,
con questa query

SQL:
select
  o.id_ordine              as o_id_ordine
, o.id_lavorazione_ordine  as o_id_lavorazione_ordine
, o.pezzi_ordine           as o_pezzi_ordine
, o.data_inizio_ordine     as o_data_inizio_ordine
, l.id_lavorazioni         as l_id_lavorazioni
, l.tipologia_lavorazione  as l_tipologia_lavorazione
, l.cod_lavorazione        as l_cod_lavorazione
, l.pz_ora                 as l_pz_ora
, r.tipologia_lavorazione  as r_tipologia_lavorazione
, r.codice_lavorazione     as r_codice_lavorazione
, sum (r.n_pz_ok)          as n_pz_ok
, sum (r.n_pz_ko)          as n_pz_ko
from @Lavorazioni l
left join @Riepilogo_lavorazioni r
on l.tipologia_lavorazione = r.tipologia_lavorazione and l.cod_lavorazione = r.codice_lavorazione
and r.data_lavorazione BETWEEN '2023-01-01' AND '2023-12-31'
left join @ordini o
on l.id_lavorazioni = o.id_lavorazione_ordine
group by
  o.id_ordine
, o.id_lavorazione_ordine
, o.pezzi_ordine
, o.data_inizio_ordine
, l.id_lavorazioni
, l.tipologia_lavorazione
, l.cod_lavorazione
, l.pz_ora
, r.tipologia_lavorazione
, r.codice_lavorazione
Marino GRAZIE infinite...nel pomeriggio provo e ti faccio sapere.
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
scusa ho dimenticato di togliere le chioccioline
@Lavorazioni
@Riepilogo_lavorazioni
@ordini
i nomi delle tre tabelle devono essere scritti senza le chioccioline
Lavorazioni
Riepilogo_lavorazioni
ordini
ciascuno seguito dal rispettivo alias come indicato nella query
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
scusa ho dimenticato di togliere le chioccioline
@Lavorazioni
@Riepilogo_lavorazioni
@ordini
i nomi delle tre tabelle devono essere scritti senza le chioccioline
Lavorazioni
Riepilogo_lavorazioni
ordini
ciascuno seguito dal rispettivo alias come indicato nella query
Grazie avevo già provveduto a sistemare. Funziona...ma mi tira fuori tutto i rek della tabella lavorazioni...io dovrei "pescare" da ordini. Sto facendo delle prove ma non va...
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
"pescare" da ordini
come ?
fai un esempio con 3-4 ordini

devi modificare anche
and r.data_lavorazione BETWEEN '2023-01-01' AND '2023-12-31'

ed eventualmente inserire un filtro per
o.data_inizio_ordine

esiste una chiave ordine su Riepilogo_lavorazioni in modo da non dover passare da lavorazioni ?
 

Emanuele85

Utente Attivo
30 Gen 2021
117
0
16
SQL:
SELECT  ordini.id_ordine,
        ordini.id_lavorazione_ordine,       
        ordini.pezzi_ordine AS ordine,
        (ordini.pezzi_ordine-SUM(n_pz_ok)) AS differenza,
        SUM(riepoligo_lavorazioni.n_pz_ok)  AS tot,                         
        riepoligo_lavorazioni.n_pz_ok,
        SUM(riepoligo_lavorazioni.n_pz_ok)*lavorazioni.prezzo_lavorazione AS euro_prodotti,
        lavorazioni.cod_lavorazione,
        lavorazioni.pz_ora,
        lavorazioni.tipologia_lavorazione,       
       ((ordini.pezzi_ordine-SUM(n_pz_ok))* lavorazioni.prezzo_lavorazione) AS euro_mancanti

 FROM ordini

   LEFT  JOIN riepoligo_lavorazioni ON ordini.id_lavorazione_ordine=riepoligo_lavorazioni.codice_lavorazione
            and ordini.data_inizio_ordine BETWEEN '2023-01-01' AND '2023-12-31'
   LEFT JOIN lavorazioni ON ordini.id_lavorazione_ordine =lavorazioni.id_lavorazione
             AND MONTH(riepoligo_lavorazioni.data_lavorazione)=MONTH(NOW())
    
 GROUP BY id_lavorazione_ordine

Marino partendo dalla tua sono arrivato a questo... e Funziona... dovrei solo dividere i dati per lavorazioni.tipologia_lavorazione. In pratica su una pagina voglio vedere solo gli ordini che fanno parte dalla "fin_man" (Finitura Manuale) e su 1 altra pagina solo gli ordini per "assiemaggio". Queste due tipologie di lavoro sono riportate sulla tabella lavorazioni.

Ci sei quasiiii

grazie infinite!!! (ho mal di testa) :)
 

marino51

Utente Attivo
28 Feb 2013
3.204
207
63
Lombardia
"fin_man" (Finitura Manuale) e su 1 altra pagina solo gli ordini per "assiemaggio"
puoi eseguire la query due volte inserendo ciascuna volta il filtro con la tipologia che ti serve

puoi fare anche una

select * from
(
qui metti la query del tuo ultimo post
) tab
where e qui metti il filtro


oppure puoi provare con "order by" se é sufficiente
 
Ultima modifica:
Discussioni simili
Autore Titolo Forum Risposte Data
D Info copyright Leggi, Normative e Fisco 0
T IP INFO NON FUNZIONA PHP 0
J Info per copia sfondo Photoshop 2
C info: da mockup al progetto finale Discussioni Varie 0
E Info tempi di indicizzazione google SEO e Posizionamento 4
D Vendo account Instagram da 12 k Followers con Engagement altissimo scrivetemi per info Compravendita siti e domini 5
M Info su yi cam dome 1080P IP Cam e Videosorveglianza 0
F Info aws ed ec2 per creazione sito vendita orodotti digitali Server Dedicati e VPS 0
V [Visual Basic] ottenere info su sistema Visual Basic 1
M [PHP] Info pagina web PHP 6
Selenio89 info framework Discussioni Varie 1
M Info phpgraph PHP 3
A [PHP] info funzioni PHP 11
J SVENDO PAGINA FACEBOOK 10.000 FANS, PER INFO ENTRA. Annunci servizi di Social Media Marketing 1
J SVENDO PAGINA FACEBOOK 10.000 FANS, PER INFO ENTRA. Annunci servizi di Social Media Marketing 4
M Info invio dati a database mysql. PHP 32
C info creazione documenti word in php PHP 0
readme Info sul SEO SEO e Posizionamento 7
B chat php/javascript che perde info nella navigazione del sito. PHP 0
P Info su vbulletin Supporto Mr.Webmaster 0
D Info Privacy Policy e Cookie Law Leggi, Normative e Fisco 1
M Salve , sono nuovo , cerco INFO, grazie Programmazione 1
P Info su vbulletin CMS (Content Management System) 7
P info generali su vbulletin CMS (Content Management System) 0
C Info wifi collegare dispositivi apple Windows e Software 1
Akuma Info app per sito Sviluppo app per Android 4
D Info NSURL sharing Sviluppo app per iOS 0
F info redirect 301 SEO e Posizionamento 0
D [SQL Server] Info su licenza e costi Database 0
T Info creazione sito bilingua WordPress 10
filippino info su backlink SEO e Posizionamento 0
A Info certificazione Discussioni Varie 17
R Info per TAG e META CMS (Content Management System) 0
R Alcune info su Versione Joomla e Template adatto Joomla 5
M info su creazione cartelle PHP 8
M Info su corsi Puntonet HTML e CSS 0
P info host Hosting 1
M info newsletter Email Marketing 1
nexus Info HTML e CSS 4
L info seo ecommerce E-Commerce 1
K info da locale a remoto Hosting 12
K info query da cambiare PHP 9
S Creazione Db e info su mysql workbench MySQL 1
K info query codice PHP 19
R php info.. PHP 10
A Info lavoro Offerte e Richieste di Lavoro e/o Collaborazione 4
F Info tag "index, follow" HTML e CSS 17
sito-wordpress SEO Info Google non vuole più il meta tag "Keyword" SEO e Posizionamento 6
P Info su script php_linkcycle.zip PHP 1
M Drupal - modifica info del sito CMS (Content Management System) 1

Discussioni simili