tip, non ripete i nomi delle tabelle nelle select, fa' così
più leggibile, no?codice:SELECT P.Nome, P.Cognome FROM Persone P
tip, non ripete i nomi delle tabelle nelle select, fa' così
più leggibile, no?codice:SELECT P.Nome, P.Cognome FROM Persone P
O sbaglio io o manca molto :
Primo ho una sola riga mentre le 3 che mi aspetto questa la union :codice:SELECT MAX(numero_prodotti_sparati) AS numero_prodotti_sparati, MAX(quantita) as quantita FROM( SELECT `ddt_righe_sparate`.`id_prodotti`, count(ddt_righe_sparate.id_prodotti) as numero_prodotti_sparati, 0 as quantita, prodotti.codice_articolo, prodotti.descrizione FROM `ddt_righe_sparate` JOIN prodotti on prodotti.id=ddt_righe_sparate.id_prodotti WHERE `ddt_righe_sparate`.`id_ddt` = 29 AND `ddt_righe_sparate`.`deleted_at` IS NULL GROUP BY `ddt_righe_sparate`.`id_prodotti`,prodotti.codice_articolo, prodotti.descrizione UNION SELECT `ddt_righe_inserite`.`id_prodotti`, 0 as numero_prodotti_sparati, `ddt_righe_inserite`.`quantita`, prodotti.codice_articolo, prodotti.descrizione FROM `ddt_righe_inserite` JOIN prodotti on prodotti.id=ddt_righe_inserite.id_prodotti WHERE `ddt_righe_inserite`.`id_ddt` = 29 AND `ddt_righe_inserite`.`deleted_at` IS NULL ) as result
id_prodotti numero_prodotti_sparati quantita
3742 1 0
11 1 0
3742 0 1
questo il risultato totale :
numero_prodotti_sparati quantita
1 1
Invece mi aspetto due righe
id_prodotti numero_prodotti_sparati quantita
3742 1 1
11 1 0
p.s. avevo provato a mettere gli screenshot ma non si vedono
Ultima modifica di pippuccio76; 08-04-2024 a 01:55
ci sei quasi. La query di esempio prevedeva una sola riga; nel tuo caso, avendone più d'una, dovrai aggiungere alla query "esterna":
- l'id e la descrizione del prodotto all'elenco delle colonne estratte
- una GROUP BY sempre per id e descrizione
prova e facce sape'
eccola, ho tolto le join dalle due interne e fatta fuori , funziona :
codice:SELECT MAX(numero_prodotti_sparati) AS numero_prodotti_sparati, MAX(quantita) as quantita,id_prodotti,prodotti.descrizione,prodotti.codice_articolo FROM( SELECT `ddt_righe_sparate`.`id_prodotti`, count(ddt_righe_sparate.id_prodotti) as numero_prodotti_sparati, 0 as quantita FROM `ddt_righe_sparate` WHERE `ddt_righe_sparate`.`id_ddt` = '.$id_ddt.' AND `ddt_righe_sparate`.`deleted_at` IS NULL GROUP BY `ddt_righe_sparate`.`id_prodotti` UNION SELECT `ddt_righe_inserite`.`id_prodotti`, 0 as numero_prodotti_sparati, `ddt_righe_inserite`.`quantita` FROM `ddt_righe_inserite` JOIN prodotti on prodotti.id=ddt_righe_inserite.id_prodotti WHERE `ddt_righe_inserite`.`id_ddt` = '.$id_ddt.' AND `ddt_righe_inserite`.`deleted_at` IS NULL ) as result join prodotti on result.id_prodotti=prodotti.id group by id_prodotti,descrizione,codice_articolo
bravo pippuccio76
gli ho solo dato una ripulita
facce sape'codice:SELECT MAX(R.numero_prodotti_sparati) AS numero_prodotti_sparati, MAX(R.quantita) as quantita, R.id_prodotti, P.descrizione, P.codice_articolo FROM( SELECT id_prodotti, count(id_prodotti) as numero_prodotti_sparati, 0 as quantita FROM ddt_righe_sparate WHERE id_ddt = '.$id_ddt.' AND deleted_at IS NULL GROUP BY id_prodotti UNION SELECT id_prodotti, 0 as numero_prodotti_sparati, quantita FROM ddt_righe_inserite WHERE id_ddt = '.$id_ddt.' AND deleted_at IS NULL ) AS result R JOIN prodotti P on R.id_prodotti=P.id GROUP BY R.id_prodotti, P.descrizione, P.codice_articolo
.
Devo effettuare una modifca a questa query , praticamente invece di raggruppare le righe per quantita devo avere una riga per prodotto ,
la mia query interna (modificata da quella sopra) è questa :
codice:SELECT doa_righe_sparate.id, `doa_righe_sparate`.`id_prodotti`, prodotti.codice_ean as codice_ean_sparato, 0 as codice_ean_inserito, 0 as inserito_manualmente, prodotti.costo as costo_prodotto FROM `doa_righe_sparate` JOIN prodotti on prodotti.id=doa_righe_sparate.id_prodotti WHERE `doa_righe_sparate`.`id_doa` = 1 AND `doa_righe_sparate`.`deleted_at` IS NULL UNION SELECT 0 as id, `doa_righe_inserite`.`id_prodotti`, 0 as codice_ean_sparato, prodotti.codice_ean as codice_ean_inserito, `doa_righe_inserite`.inserito_manualmente, prodotti.costo as costo_prodotto FROM `doa_righe_inserite` JOIN prodotti on prodotti.id=doa_righe_inserite.id_prodotti WHERE `doa_righe_inserite`.`id_doa` = 1 AND `doa_righe_inserite`.`deleted_at` IS NULL ) as result join prodotti on result.id_prodotti=prodotti.id group by id_prodotti,descrizione,codice_articolo
il risultato (estrapolato in parte è il seguente) :
https://imgur.com/ONNBOT3.png
Avrei la necessita che se c'è una riga con codice inserito uguale a quello sparato la riga con codice inserito venga tolta e venga scritto nella stessa riga di quello sparato ad esempio nell'esempio sopra la prima riga con id = 0 e con ean inserito al primo posto venga cancellata e l'ean inserito vada nella prima riga,
la seconda al secondo posto mentre le altre due non avendo corrispondenza rimangano esattamente così...
scusate la query attuale � questa :
codice:SELECT doa_righe_sparate.id, `doa_righe_sparate`.`id_prodotti`, prodotti.codice_ean as codice_ean_sparato, 0 as codice_ean_inserito, 0 as inserito_manualmente, prodotti.costo as costo_prodotto FROM `doa_righe_sparate` JOIN prodotti on prodotti.id=doa_righe_sparate.id_prodotti WHERE `doa_righe_sparate`.`id_doa` = 1 AND `doa_righe_sparate`.`deleted_at` IS NULL UNION ALL SELECT 0 as id, `doa_righe_inserite`.`id_prodotti`, 0 as codice_ean_sparato, prodotti.codice_ean as codice_ean_inserito, `doa_righe_inserite`.inserito_manualmente, prodotti.costo as costo_prodotto FROM `doa_righe_inserite` JOIN prodotti on prodotti.id=doa_righe_inserite.id_prodotti WHERE `doa_righe_inserite`.`id_doa` = 1 AND `doa_righe_inserite`.`deleted_at` IS NULL
Ultima modifica di pippuccio76; 02-07-2024 a 21:47
@pippuccio76, nuovo quesito, nuovo thread, pls
denghiù