2013-05-24 13 views
5

Sto usando il seguente per cercare di uscita miei totali mensili in un formato come:totali mensili mese ritornare NULL, e solo l'output totale parziale

January 
Quoted Total : £678 
Parts Total : £432 
Profit Total : £244 

February 
Quoted Total : £650 
Parts Total : £345 
Profit Total : £123 

ecc ..........

// Work Complete Totals 
    $query = $db->query("SELECT SUM(pricequoted) AS pricequotedtotal, 
           SUM(partprice) AS partpricetotal, 
           SUM(profit) profittotal, 
           DATE_FORMAT('%Y-%m', completeddate) AS month 
         FROM `jobdetails` 
         WHERE jobstatus='complete' 
         GROUP BY DATE_FORMAT('%Y-%m', completeddate)"); 


    echo '<div style="float:right; padding-right:10px;">'; 
    echo '<strong>Work Complete Totals</strong>'; 

    while($result = $query->fetch_object()) { 

     $pricequoted = number_format($result->pricequotedtotal, 2, '.', ''); 
     $partprice = number_format($result->partpricetotal, 2, '.', ''); 
     $profit  = number_format($result->profittotal, 2, '.', ''); 

     echo '<p><strong style="color:red;">Quoted Total : &pound;'.$pricequoted.'</strong></p>'; 
     echo '<p><strong style="color:Darkorange ;">Parts Total : &pound;'.$partprice.'</strong></p>'; 
     echo '<p><strong style="color:green;">Profit Total : &pound;'.$profit.'</strong></p>'; 
    } 

    echo '</div>'; 

il problema che sto ottenendo è che è l'output solo i totali parziali, in modo da ottenere quanto segue alla parte inferiore della pagina una volta, ma niente di più:

Work Complete Totals 
Quoted Total : £1460.00 

Parts Total : £541.43 

Profit Total : £918.57 

Se corro query precedente in phpMyAdmin ottengo il risultato:

pricequotedtotal partpricetotal profittotal  month 
     1460    541.43  918.5699999999998 NULL 

Il layout del mio tavolo è la seguente:

id customerID name facebookuserurl tel email address itemforrepair repairdetails otherdetails pricequoted partprice profit datepartordered jobstatus dateofcompletion datecreated itemnumber 

Qui di seguito è una fila di esempio:

49 37ac4 Ellen Frost https://www.facebook.com/ellen.mccormick.18    Galaxy S3 (Fullsize) Blue Broken front glass and also digitiser not working. Quoted customer on whole lcd, digitiser assembly r... 140 114.98 25.02 2013-05-02 complete 2013-05-08 2013-05-01 251258104217 

MODIFICA >> Di seguito è riportata una schermata di diverse righe nella tabella. enter image description here

EDIT >>

Questa è la mia struttura della tabella: enter image description here

+0

Cosa fa mysqli con questa domanda? È semplice API per eseguire la query. Preferisco etichettarlo con SQL che mysqli. –

risposta

6

È necessario per cambiare questo

DATE_FORMAT('%Y-%m', completeddate) 

a

DATE_FORMAT(completeddate, '%Y-%m') 

Ecco perché si ottiene NULL nella colonna month e quindi solo una riga.

Vedere manual entry.

+0

Quando cambio non ottengo alcun totale. –

+0

Ah, ora funziona, anche altri bit modificati. –

+0

Felice di sentirlo :) – fancyPants

4
SUM(pricequoted) AS pricequotedtotal, 
SUM(partprice) AS partpricetotal, 
SUM(profit) profittotal, 

Dovrebbe essere

SUM(pricequoted) AS pricequotedtotal, 
SUM(partprice) AS partpricetotal, 
SUM(profit) AS profittotal, 

ti sei perso un "AS"

+0

Questo non visualizza nulla –

+0

Tutto ciò che ottengo è l'intestazione "Work Complete Totals" e nulla sotto di esso. –

+0

Sostituiscilo con il tuo. Ti sei perso qualcosa. –

4

Beh si può provare questa query

SELECT SUM(pricequoted) AS pricequotedtotal, 
     SUM(partprice) AS partpricetotal, 
     SUM(profit) AS profittotal, 
     MONTHNAME(completeddate) AS month 
      FROM `jobdetails` 
     WHERE jobstatus='complete' 
      GROUP BY MONTH(completeddate) 

colonna 'completeddate' non esiste nella tabella sopra riportata, invece usare 'dateofcompletion'

Quindi, eseguire la query e la loro messa in while ciclo produrrà esattamente ciò che u voluto

Inoltre ho visto la tua struttura della tabella, è meglio formattare un tavolo un po 'utilizzando varchar, int, float e così via ..text colonne consumano più memoria

http://www.pythian.com/blog/text-vs-varchar/

http://nicj.net/mysql-text-vs-varchar-performance/

5

Ian,

Credo che la seguente query vi aiuterà.

SELECT SUM (pricequoted) AS pricequotedtotal, SUM (partprice) AS partpricetotal, SUM (profitto) profittotal, MONTHNAME (dateofcompletion) FROM WHERE jobdetails jobstatus = 'completa' GROUP BY DATE_FORMAT (dateofcompletion, '% Y-% m') ordine per data di completamento;

 

    +------------------+----------------+-------------+-----------------------------+ 
    | pricequotedtotal | partpricetotal | profittotal | MONTHNAME(dateofcompletion) | 
    +------------------+----------------+-------------+-----------------------------+ 
    |    140 |   114.98 |  25.02 | May       | 
    |    140 |   114.98 |  25.02 | June      | 
    +------------------+----------------+-------------+-----------------------------+ 
2 rows in set (0.00 sec) 
Problemi correlati