2012-02-02 13 views
5

Ho 2 colonne in una tabella chiamata Punti. Le 2 colonne sono UserPoints e UserID.Echoing la somma di una tabella in PHP

Voglio essere in grado di echeggiare la quantità totale di punti che un utente ha.

Ho qualcosa del genere ma non penso sia giusto.

$getTotalPoints = mysql_query("SELECT SUM(UserPoints) FROM `Points` WHERE `UserID` = '1'") or die(mysql_error()); 
$totalPoints = mysql_fetch_array($getTotalPoints); 

Quando mi associo alla dichiarazione di cui sopra facendo eco "$ totalPoints" I Get "array".

Qualcuno conosce la query corretta per farlo?

risposta

4

Si sta ottenendo Array perché questo è ciò che è memorizzato in $totalPoints. Osserva attentamente il tuo codice e vedrai che hai utilizzato la funzione mysql_fetch_array(), che recupera una riga di risultati dai risultati impostati come una matrice. Se lo fai var_dump() su $totalPoints vedrete il seguente:

Array 
(
    [0] => 12345 
    [SUM(UserPoints)] => 12345 
) 

La somma che stai cercando è a indice 0 oppure il nome della colonna, in questo caso SUM(UserPoints), in modo da poter uscita utilizzando echo $totalPoints[0] o echo $totalPoints['SUM(UserPoints)'] .

In alternativa, è possibile utilizzare la funzione mysql_result(). Penso che questo sia più in linea con il comportamento che ti aspettavi. Prende un singolo valore dalla riga dal set di risultati. Così, invece di mysql_fetch_array() che ci ha scritto:

$totalPoints = mysql_result($result, 0); 

Per ulteriori informazioni su mysql_result(), controllare il PHP documentation for it.

Per inciso, mi raccomando di non utilizzare le funzioni mysql_ * se si dispone dell'opzione. Una nuova interfaccia come PDO, o almeno mysqli, sarebbe meglio. Questo dipenderà ovviamente dal tuo progetto ... se stai lavorando con una base di codice legacy di grandi dimensioni potrebbe essere difficile cambiare.Ma se stai iniziando adesso, penso che trarrai beneficio dalle nuove librerie. Puoi vedere la mia opinione e alcune indicazioni sulla transizione delle estensioni in questo article I wrote.

Spero che questo abbia aiutato ... e buona fortuna!

+0

+1 per l'articolo fantastico. –

1

mysql_fetch_array recupera una riga di risultati come una matrice associativa, una matrice numerica o entrambi. per impostazione predefinita crea entrambi. tutto ciò che serve è quello echo $totalPoints[0];

o, se si riscrive di richiedere come

$getTotalPoints = mysql_query("SELECT SUM(UserPoints) total FROM `Points` 
     WHERE `UserID` = '1'") or die(mysql_error()); 
$totalPoints = mysql_fetch_array($getTotalPoints); 
echo $totalPoints['total']; 
1

mysql_fetch_array restituisce un array. Pertanto è necessario trattare $totalpoints come una matrice.

prova ad aggiungere questa riga alla fine del frammento:

echo $totalPoints[0];

Ci sono diversi modi per recuperare i dati con le funzioni di MySQL vi suggerisco di leggere su di loro nel manuale php.

Ecco mysql_fetch_array

1

La fila di risultati è un array con il maggior numero di elementi come avete ottenuto in SELECT. Nel tuo caso hai solo 1 elemento (la somma). Quindi dovresti: echo $totalPoints[0]; Se hai bisogno di eseguire il debug di questo tipo di problemi ti consiglio di leggere sulla funzione print_r.

Problemi correlati