Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    Eseguire query su tabella estratta da altra query

    Buongiorno a tutti,

    ho un problema che credo sia possibile risolvere lato db [MySql], ma non capisco bene come.

    Tramite delle join su molte tabelle, ottengo come risultato una tabella del tipo
    A | B | C | D | E | F

    Ora, su questa tabella vorrei eseguire delle operazioni di calcolo.
    Vorrei, per ogni riga, eseguire una moltiplicazione D * F e ottenere a questo punto la somma di tutte le moltiplicazioni D * F eseguite che abbiano il medesimo valore per la colonna A.

    In realtà eseguo già queste operazioni con il PHP. Il problema è che l'elaborazione di questa query mi deve generare una tabella 70 * 90 e il tempo di elaborazione è troppo alto (siamo tra i 1.5 e i 2 secondi complessivi, compresa la query iniziale). Questo perchè è il PHP che deve iterare molte volte gli stessi risultati e il tutto porta via tempo.

    Se invece riuscissi ad eseguire l'operazione di cui sopra, potrei giocare sull'ordinamento dei risultati e scrivere 'direttamente' i miei risultati, evitando di iterare le stesse operazioni più e più volte.
    Il PHP non esegue solo le operazioni si moltiplicazione e somma, ma dovendo scrivere una tabella a mo di scacchiera, va a cercarsi dentro i risultati della query i valori corretti per ogni cella A1, A2 etc. Con le operazioni che sto cercando di far fare al db e ordinando i risultati, il PHP dovrebbe semplicemente scrivere riga per riga, ma senza più tornare sui suoi passi.

    Spero di essere stato chiaro...
    Grazie e chi voglia darmi una mano.

  2. #2
    Utente bannato
    Registrato dal
    Dec 2012
    Messaggi
    679
    Non è che abbia capito benissimo, per come la vedo puoi

    1) fa calcolare direttamente prodotti e somme con una singola query (auspicabile)
    2) creare una vista (ma che senso ha?)
    3) inserire i risultati in una tabella HEAP (o memory che dir si voglia) se non è molto grande e non hai problemi di concorrenza (cosa assai probabile)
    4) se la tabella da esaminare è davvero grande (grande per me significa sopra le 500.000 righe, visto i requisiti di tempo richiesti) allora ti serve qualcosa di meglio, in particolare una innodb se puoi creare un indice, meglio ancora covering, sulle condizioni di raggruppamento
    5) se la tabella è poi enorme come 4) ma con un partizionamento (se disponi di mysql >=5.1)

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.