eseguire calcoli matematici su risultati 2 tabelle mysql

GioGio2020

Nuovo Utente
31 Mar 2020
11
1
3
Ciao a tutti, non sono esperto di PHP ma sto imparando,
ho cercato in google e sul forum ma forse non uso i termini giusti, vi spiego il problema:
in MySql ho 2 tabelle

manodopera

id | manodopera | prezzo | id_scheda

e la tabella

ricambi
id | ricambio | prezzo_vendita | id_scheda

Io voglio estrarre i record da entrambe le tabelle dove id_scheda viene usato come WHERE per associare i ricambi e la manodopera associati a una id_scheda e stamparli a video e sommare prezzo+prezzo_vendita e avere il totale


id_scheda (nelle due tabelle)ricambio o manodoperaprezzo
25schermo lcd samsung (ricambio)50
25Pellicola protettiva (ricambio)10
25sostituzione schermo (manodopera)30
25installazione pellicola5

totale: 95€

se qualcuno mi indirizza o mi dice qualche funzione poi cerco in internet (non chiedo la pappa pronta), non ho idea di come estrarre i record stamparli a video e sommarli, so fare solo select singole ma anche in questo caso non so come sommarli
grazie a tutti
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
sei nella sezione php, quindi dovresti poter scrivere il codice con questo linguaggio di programmazione,
potresti creare la pagina dove inserire i dati di ricerca della scheda, id, ma anche altri parametri se pensi a sviluppi futuri
questa pagina conterrà un "form" per passare i dati ad una seconda pagina che fa il lavoro di

connessione al db,
query per la ricerca delle informazioni
"scorrimento" del risultato della ricerca per listare a video degli elementi estratti dal db
magari con "codice", "descrizione", "quantità", "prezzo unitario", "qtà x prezzo" e "assoggettamento iva"
totalizzando il prezzo per riga (considerando l'iva) e riportando il totale dopo l'ultima riga

la query potrebbe essere costituita dall'unione di 2 query per semplificare il codice da scrivere
select ……. from manodopera
UNION
select ……. from materiali
avendo cura di indicare lo stesso numero di colonne con gli stessi nomi (vedi uso degli alias) nelle 2 select

nel sonnolento pomeriggio spero di aver scritto una traccia decente
 

GioGio2020

Nuovo Utente
31 Mar 2020
11
1
3
ciao, ti ringrazio per la risposta, posso fare anche due select distinte non è un problema però il mio problema è anche fare i totali dei costi e non so come fare
 

marino51

Utente Attivo
28 Feb 2013
2.903
160
63
Lombardia
posso fare anche due select distinte
se fai due select distinte, devi raddoppiare (inutilmente) il codice,
anzi a mio parere viene bene un'unica query,
dove il tipo identifica il contenuto della riga selezionata, esempio
1 = manodopera, 2 = materiali, 3 = totalizzazioni x iva e 4 totale del documento (esclusa iva)

esempio

1587375739434.png


scusa, la colonna imponibile va letta per tipo, prezzo/imponibile/totale

l'esempio é ottenuto con questi dati e la query (unica) che segue
SQL:
DECLARE @manodopera Table
(
  id_scheda      int
, codart         varchar(10)
, desart         varchar(10)
, codiva         varchar(10)
, qta            float
, imponibile     float
);

INSERT INTO @manodopera(id_scheda, codart, desart, codiva, qta, imponibile)
SELECT 1, 'man1',  'desman1', 'iva1', 10, 10.15 UNION ALL
SELECT 1, 'man2',  'desman2', 'iva1', 11, 11.15 UNION ALL
SELECT 1, 'man3',  'desman3', 'iva2', 12, 12.15 UNION ALL
SELECT 1, 'man4',  'desman4', 'iva1', 13, 13.15;

DECLARE @materiali Table
(
  id_scheda      int
, codart         varchar(10)
, desart         varchar(10)
, codiva         varchar(10)
, qta            float
, imponibile     float
);

INSERT INTO @materiali(id_scheda, codart, desart, codiva, qta, imponibile)
SELECT 1, 'mat1',  'desmat1', 'iva1', 10, 10.15 UNION ALL
SELECT 1, 'mat2',  'desmat2', 'iva3', 11, 11.15 UNION ALL
SELECT 1, 'mat3',  'desmat3', 'iva1', 12, 12.15 UNION ALL
SELECT 1, 'mat4',  'desmat4', 'iva1', 13, 13.15;

select 1 as tipo, codart, desart, qta, imponibile, (qta * imponibile) as totale from @manodopera where id_scheda=1
union all
select 2 as tipo, codart, desart, qta, imponibile, (qta * imponibile) as totale from @materiali where id_scheda=1
union all
select 3 as tipo, codart, desart, sum(qta) as qta, sum(imponibile) as imponibile, sum(qta * imponibile) as totale from (
  select codiva as codart, 'desiva' as desart, qta, imponibile, (qta * imponibile) as totale from @manodopera where id_scheda=1
  union all
  select codiva as codart, 'desiva' as desart, qta, imponibile, (qta * imponibile) as totale from @materiali where id_scheda=1
) t1
group by codart, desart
union all
select 4 as tipo, codart, desart, sum(qta) as qta, sum(imponibile) as imponibile, sum(qta * imponibile) as totale from (
  select 'totale' as codart, 'totale' as desart, qta, imponibile, (qta * imponibile) as totale from @manodopera where id_scheda=1
  union all
  select 'totale' as codart, 'totale' as desart, qta, imponibile, (qta * imponibile) as totale from @materiali where id_scheda=1
) t2
group by codart, desart
 
Ultima modifica:
  • Like
Reactions: GioGio2020