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

    visualizzare record e precedente nello stesso ciclo whilee

    ciao a tutti ho un piccolo problema. Vorrei calcolare la differenza algebrica tra un valore e il suo precedente. I valori vengono attinti da una tabella mysql. Mi spiego meglio inserendovi tutti i dati

    tabella

    Codice PHP:
    CREATE TABLE farma_punti (
      
    id_farmapunti int(6unsigned NOT NULL auto_increment,
      
    numero_fidelity int(6unsigned zerofill NOT NULL default '000000',
      
    data int(10NOT NULL default '0',
      
    prezzo float(10,2NOT NULL default '0.00',
      
    punteggio float(10,2NOT NULL default '0.00',
      
    KEY id_farmapunti (id_farmapunti),
      
    KEY numero_fidelity (numero_fidelity)

    SELECT

    Codice PHP:
    $query_fatt_parz "SELECT *, DATE_FORMAT(data, '%Y') as anno, SUM(prezzo) AS single FROM farma_punti GROUP BY YEAR(data)";
    $fatt_parz mysql_query($query_fatt_parz$farmacialoi) or die(mysql_error());
    $row_fatt_parz mysql_fetch_assoc($fatt_parz);
    $totalRows_fatt_parz mysql_num_rows($fatt_parz); 
    CICLO

    Codice PHP:
     <?php do { 
    echo 
    $row_fatt_parz['single']." | "; }
    while (
    $row_fatt_parz mysql_fetch_assoc($fatt_parz)); ?>
    Vorrei poter calcolare la percentuale di differenza tra i due valori e quindi avrei la necessità di selezionare nella stessa riga del ciclo il valore e il suo precedente.
    A complicarmi le cose c'è il fatto che i valori che devo sottrarre sono delle somme creato con l'istruzione SUM().

    Ho provato l'istruzione prev($valore) ma in effetti non ho capito bene se quando si crea un ciclo questo è un array.
    Vi sarei molto grato se mi poteste dare una mano.
    Grazie

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Gli id sono tutti sequenziali oppure ci sono o potrebbero esserci dei buchi?

  3. #3
    Scusami non capisco cosa intendi per sequenziali, sequenziali in base a cosa?

  4. #4
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Intendevo dire se i tuoi identificativi id_farmapunti saranno tutti contigui, quindi partendo da 1 fino ad esempio a 1000 senza che ci siano degli id mancanti dovuti ad eventuali cancellazioni di record. Mi sono reso conto però leggendo meglio che la differenza non la devi fare sui singoli record ma su dei valori raggruppati.

    Potresti comunque postare qualche record di esempio e anche ciò che effettivamente vorresti ottenere?

  5. #5
    Ok ti metto di seguito alcuni record di esempio
    Codice PHP:
    INSERT INTO farma_punti VALUES (100177720060207'6.60''2.17');
    INSERT INTO farma_punti VALUES (200177720060207'13.20''4.35');
    INSERT INTO farma_punti VALUES (400177720060605'3.95''1.30');
    INSERT INTO farma_punti VALUES (500275520070605'4.95''1.63');
    INSERT INTO farma_punti VALUES (600275520070605'7.49''0.00');
    INSERT INTO farma_punti VALUES (700275520070608'17.24''5.68');
    INSERT INTO farma_punti VALUES (800474520080102,  '4.95''1.63');
    INSERT INTO farma_punti VALUES (900474520080102,  '4.90''0.00');
    INSERT INTO farma_punti VALUES (1000474520080102'6.00''1.98'); 
    Questo è un esempio di estrazione dei record. In poche parole quello che vorrei poter fare è sommare tutti i valori del campo prezzo in modo da calcolare il fatturato per ogni anno (e sin li ci siamo); poi vorrei poter fare un ciclo dove mi appare nella stessa casella l'aumento percentuale rispetto all'anno precedente (e per questo dovrei conoscere appunto la somma del fatturato dell'anno precedente per potermi calcolare tale dato).
    Spero di essere stato chiaro, so di essere un po' contorto nello spiegare ma in realtà è molto più semplice di quanto sembri.

    Ti faccio un esempio

    fatturato....23,75..........29,68..........15,85
    anno..........2006...........2007...........2008
    %..............0................+5%............-50%

  6. #6
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ok, sei stato chiarissimo.

    Concettualmente il metodo è questo

    Codice PHP:
    $query mysql_query("SELECT *, 
                          DATE_FORMAT(data, '%Y') as anno, 
                          SUM(prezzo) AS single 
                          FROM farma_punti 
                          GROUP BY YEAR(data)
                          ORDER BY anno"
    ) or die(mysql_error() );

    $precedente 0;            
    while (
    $row mysql_fetch_assoc($query) ) {
    $valore $precedente == :(($row['single']/$precedente)*100)-100;
    echo 
    $row['single'].' '.$row['anno'].' '.$valore;
    echo 
    '
    '
    ;
    $precedente $row['single'];

    I miei risultati non coincidono con i tuoi ma sono un pò arrugginito con la statistica. :stordita:
    Nel caso correggetemi. :)

  7. #7
    Grazie mille per l'aiuto, mi sei stato davvero prezioso.

  8. #8
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Mi fa piacere.

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.