- Home
- Categorie
- Coding e Sistemistica
- PHP
- Query somma campo con lo stsso idUtente
-
Query somma campo con lo stsso idUtente
Salve a tutti, premetto che ho una conoscenza base sia di mysql che ti php.
Arrivo al punto, ho diverse query da mettere insieme, ma non riesco ad unirle e visualizzare i risultati che mi servono.
Iniziamo con una semplice...
Ho una tabella con questi campi:
id
idCitta
nomeCitta
abitantiCitta
idUtente
nomeUtenteIn output vorrei avere una tabella con un campo in più, chiamiamolo abitantiUtente, che sarebbe la somma di abitantiCitta corrispondente allo stesso utente.
Ad esempio la tabella originale è questa:
[TABLE="class: grid, width: 500"][TD]id[/TD]
[TD]idCitta[/TD]
[TD]nomeCitta[/TD]
[TD]abitantiCitta[/TD]
[TD]idUtente[/TD]
[TD]nomeUtente[/TD]
[/TR][TD]1[/TD]
[TD]1200[/TD]
[TD]Metropolis[/TD]
[TD]200[/TD]
[TD]10[/TD]
[TD]Filippo[/TD]
[/TR][TD]2[/TD]
[TD]1300[/TD]
[TD]Roma[/TD]
[TD]120[/TD]
[TD]19[/TD]
[TD]Giovanni[/TD]
[/TR][TD]3[/TD]
[TD]1400[/TD]
[TD]Lugano[/TD]
[TD]87[/TD]
[TD]19[/TD]
[TD]Giovanni[/TD]
[/TR][TD]4[/TD]
[TD]1500[/TD]
[TD]Smallville[/TD]
[TD]100[/TD]
[TD]10[/TD]
[TD]Filippo[/TD]
[/TR]
[/TABLE]E in output vorrei avere questa:
[TABLE="class: grid, width: 500"][TD]id[/TD]
[TD]idCitta[/TD]
[TD]nomeCitta[/TD]
[TD]abitantiCitta[/TD]
[TD]idUtente[/TD]
[TD]nomeUtente[/TD]
[TD]abitantiUtente[/TD]
[/TR][TD]1[/TD]
[TD]1200[/TD]
[TD]Metropolis[/TD]
[TD]200[/TD]
[TD]10[/TD]
[TD]Filippo[/TD]
[TD]300[/TD]
[/TR][TD]2[/TD]
[TD]1300[/TD]
[TD]Roma[/TD]
[TD]120[/TD]
[TD]19[/TD]
[TD]Giovanni[/TD]
[TD]207[/TD]
[/TR][TD]3[/TD]
[TD]1400[/TD]
[TD]Lugano[/TD]
[TD]87[/TD]
[TD]19[/TD]
[TD]Giovanni[/TD]
[TD]207[/TD]
[/TR][TD]4[/TD]
[TD]1500[/TD]
[TD]Smallville[/TD]
[TD]100[/TD]
[TD]10[/TD]
[TD]Filippo[/TD]
[TD]300[/TD]
[/TR]
[/TABLE]Grazie per le risposte.
-
Ciao, con una semplice group by puoi ricavare la somma degli abitanti per ogni idUtente, con un altra query recuperi la lista dei campi che ti servono, dopodichè crei la stringa di output in formato HTML (ho ipotizzato che il dato debba essere visualizzato su una pagina web).
Trovi la sintassi sul sito w3cschools.Marco Puccetti
-
Ciao e grazie per la risposta.
Quello che hai appena scritto io lo faccio già, cioè recuperarmi la somma degli abitanti delle città con group by idUtente e mandarla in output a parte (quindi con due SELECT diverse)
Quello che vorrei è eliminare la select che calcola gli abitantiUtente e accorparla a quella principale (che prende tutti i record della tabella).
Diciamo che ho pensato ad una soluzione, che ovviamente non funziona, magari potreste darmi un mano a sistemarlaSELECT *, ( SELECT SUM(table.abitantiCitta) FROM table GROUP BY idUtente ) AS abitantiUtente FROM table
Ovviamente questa query non funziona....
-
Ciao, prova ad utilizzare gli alias come ho riportato di seguito.
In questo modo non dovrebbe servire neppure il raggruppamento.
Per l'ordinamento fai come meglio desideri.
Considera che adesso non posso provarla, per cui dammi un riscontro sull'esito del test.**SELECT T1.id, T1.idCitta, **** T1.****nomeCitta, **** T1.****abitantiCitta, **** T1.****idUtente, **** T1.**nomeUtente,
(
SELECT SUM(abitantiCitta) as abitantiUtente FROM TABELLA T2 WHERE T2.idUtente = T1.IdUser
)
FROM TABLE T1
)Marco Puccetti
-
Considera che io ho una sola tabella, quindi ho modificato quello che hai scritto considerando in entrambe le select la tabella T1.
Il risultato è che in ouput nella nuova colonna mi somma tutti gli abitanti di ogni citta della tabella (non solo quelli corrispondenti ad ogni idUtente).
Mi sfugge qualcosa, ma non capisco cosa..
-
Prova così:
**SELECT DISTINCT T1.id, T1.idCitta, **T1.**nomeCitta, **T1.**abitantiCitta, **T1.**idUtente, **T1.**nomeUtente,
(
SELECT SUM(abitantiCitta) as abitantiUtente FROM TABELLA T2 WHERE ****T2.idUtente = T1.idUtente
)
FROM ************************************TABELLA ************************************T1
ORDER BY T1.idUtente
)L'alias nella sotto-select dovrebbe garantirti che ad ogni passo venga eseguita la somma solo sugli *********************idUtente *********************espressi nella condizione T2.idUtente = T1.idUtente.
Praticamente con l'alias utilizzi una tabella in due contesti differenti (gli alias sono T1 e T2).
Provala e fammi sapere
Marco******************
-
Perfetto! Funziona alla grande! Non avevo letto bene il post precedente, mea culpa...
Ecco, diciamo che quei risultati non mi serve averli in output, la sottoquery è un condizione della query principale e mi serviva ottenere quel risultato....comunque, avremo modo di parlarne, ho da ottimizzare un paio di query e se non riesco a risolvere apro un altro post.
Grazie mille
-
Bene, in ogni caso, sono sempre disponibile ad aiutarti per qualsiasi problema.
Marco