[PHP] Creare chart con highchart

  • Creatore Discussione Creatore Discussione Micio.
  • Data di inizio Data di inizio

Micio.

Nuovo Utente
27 Set 2016
6
0
1
Salve, sono nuovo in questo forum e anche col PHP, vorrei creare un grafico con Highchart collegato al mio db. Sto utilizzando questo grafico ma trovo difficoltà a creare una query che faccia quello che voglio. La tabella nel DB contiene due valori principali, un 'date' e un 'amount'. 'date' è il current_timestamp e 'amount' è il valore assegnato. Vorrei effettuare una somma dei valori per ogni giorni per i 30 giorni precedenti. Considerando che 'amount' è il valore di acquisto di un prodotto e 'date' la data di acquisto, vorrei creare un grafico che rappresenti ogni giorno la somma dei pagamenti per i 30 giorni precedenti.

Questa è la tabella:
18a0ec793c.png


Per ora sono riuscito solo a estrapolare il valore di oggi:
$tot_p = $db->fetchOne("SELECT SUM(amount) FROM deposit_history WHERE date > UNIX_TIMESTAMP(CURDATE())")

ma non so come fare un ciclo per i 30 giorni precedenti.
 
Ciao, per una ricerca tra un range di date si usa BETWEEN, con INTERVAL invece puoi calcorare i 30 giorni e usi GROUP BY per raggruppare anno mese e giorno
Codice:
SELECT SUM(amount)
FROM deposit_history
WHERE time BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY YEAR(time),MONTH(time),DAY(time)
 
  • Like
Reactions: Micio.
Ciao, per una ricerca tra un range di date si usa BETWEEN, con INTERVAL invece puoi calcorare i 30 giorni e usi GROUP BY per raggruppare anno mese e giorno
Codice:
SELECT SUM(amount)
FROM deposit_history
WHERE time BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY YEAR(time),MONTH(time),DAY(time)

Grazie per la risposta, poi vorrei inserirli in una stringa che concateni tutti i risultati con un virgola (19.98, 30.29 ecc.) una roba del genere:
while($row=$db->fetch_array($query)){
$lista_somme .= $row['$Risultato_variabile_somma'].", ";}

Come posso fare?
 
Ho messo nella query
SELECT SUM(amount)
FROM deposit_history
WHERE time BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY YEAR(time),MONTH(time),DAY(time)
l'aggiunta di as daily_income
SELECT SUM(amount)
AS daily_income
FROM deposit_history
WHERE time BETWEEN CURDATE() - INTERVAL 30 DAY AND CURDATE()
GROUP BY YEAR(time),MONTH(time),DAY(time)

e poi ho provato a stampare
while($row=$db->fetch_array($query)){
$daily_income .= $row['daily_income'].",";
}
echo $daily_income[0];
e dovrebbe stampare il risultato della somma di oggi ma non esce niente :(
 
No niente sono un coglione, ho messo l'indice del vettore nella variabile $daily_income lol


Ecco l'istruzione giusta
while($row=$db->fetch_array($query)){
$daily_income .= $row['daily_income'].",";
}
echo $daily_income;
 
Ottimo, è meglio però dichiarare le varibili prima di concatenarle : php genera un warning senza bloccarti il programma altri linguaggi invece ti danno un errore e bloccano l'esecuzione. Ti basta aggiungere $daily_income = ""; proma del ciclo.
 
mi permetto di intervenire con il seguente suggerimento per l'uso di Highcharts,

primo step in php

in questa array raccolgo tutte le categorie (termine usato da highcharts) che vanno sull'ascissa
PHP:
  while( $data = $sth->fetch() ) {
    $SPW_xAxisCat[] = (string)$data['time'];
l'ora la passo come stringa

nelle array che seguono riporto i valori che andranno sul o sugli assi Y
PHP:
    $SPW_y0data[]   = (float)$data['GRpower'];
    $SPW_y1data[]   = (float)round($TOTenergy, 1, PHP_ROUND_HALF_UP);
    $SPW_y2data[]   = (float)round($AVEenergy, 1, PHP_ROUND_HALF_UP);

il secondo step consiste nel rendere disponibili questi valori a javascript (vedi come sono costruiti gli esempi del sito highcharts)
in particolare ho creato un js "standard" che all'inizio trova i dati generati da php
PHP:
$(document).ready(function() {

  var    SPW_color    = Highcharts.getOptions().colors;

  var    SPW_Chart    = '<?php echo ( empty($SPW_Chart)    ? ''        : $SPW_Chart );        ?>',
    SPW_ChartInv    = '<?php echo ( empty($SPW_ChartInv)    ? false        : $SPW_ChartInv );    ?>',
    SPW_Title    = '<?php echo ( empty($SPW_Title)    ? 'Title'    : $SPW_Title );        ?>',
    SPW_SubTitle    = '<?php echo ( empty($SPW_SubTitle)    ? 'SubTitle'    : $SPW_SubTitle );    ?>',
    SPW_LabelsOnCol    = '<?php echo ( empty($SPW_LabelsOnCol)    ? false        : $SPW_LabelsOnCol );    ?>',
    SPW_Stacking    = '<?php echo ( empty($SPW_Stacking)    ? false        : $SPW_Stacking );    ?>';

  var    SPW_xAxis    = <?php echo json_encode($SPW_xAxis); ?>;
  var    SPW_yAxis    = <?php echo json_encode($SPW_yAxis); ?>;
  var    SPW_ySeries    = <?php echo json_encode($SPW_ySeries); ?>;
  .....
  .....

nel terzo step, i dati vengono "associati" alla struttura highcharts
PHP:
    chart:
        {
        type: SPW_Chart,
        zoomType: 'xy',
        inverted: SPW_ChartInv,
        spacingBottom: 20
        },

    title:
        {
        text: SPW_Title
        },

visualizzando il grafico
 

Discussioni simili