Campo con totale di una colonna

Ciao a tutti. Ho bisogno di un aiuto. Ho una tabella con le seguenti colonne:

id

stagione

cognome

ruolo

presenze

reti

Con una query faccio la ricerca di un giocatore (cognome) ed estraggo dal db i record corrispondenti al giocatore in ordine di stagione.

Fin qui tutto bene: ottengo una scheda con il dettaglio delle presenze e delle reti per singola stagione. Vorrei però creare un campo che mi sommi il totale della colonna presenze (e di quella delle reti). Ho fatto diversi tentativi, consumato ore e ore, ma senza alcun effetto positivo. Qualcuno sa darmi qualche suggerimento, premettendo che sono un po' duro a comprendere il codice?

inviato 8 anni fa
gilfor
X 0 X

Hai due possibilità: eseguire una nuova query che ti calcoli i totali, grazie alla funzione SUM(nome_campo) oppure fare le somme da PHP sui singoli record estratti, durante il ciclo che utilizzi per fare la fetch dei risultati.

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

 :-\

Grazie per la risposta, ma sono sempre in alto mare. Ho provato più volte, ma mi segnala sempre degli errori di sintassi. Per chiarezza ti elenco le query utilizzate per ottenere tre tipi di ricerche (per giocatore, per stagione o per categoria) e quella in grassetto è la query che mi dovrebbe dare un campo con la somma della colonna presenze quando faccio la ricerca per giocatore:

<?php

$colname_rsPresenze = "";

$query_rsPresenze = sprintf("SELECT * FROM presenze WHERE giocatore Like '%s%s' ORDER BY stagione ASC", $colname_rsPresenze,"%");

if (isset($_POST['giocatore'])) {

  $colname_rsPresenze = (get_magic_quotes_gpc()) ? $_POST['giocatore'] : addslashes($_GET['giocatore']);

$query_rsPresenze = sprintf("SELECT * FROM presenze WHERE giocatore Like '%s%s' ORDER by stagione ASC", $colname_rsPresenze,"%");

}

if (isset($_POST['stagione'])) {

$colname_rsPresenze = (get_magic_quotes_gpc()) ? $_POST['stagione'] : addslashes($_GET['stagione']);

$query_rsPresenze = sprintf("SELECT * FROM presenze WHERE stagione Like '%s%s' ORDER by stagione ASC", $colname_rsPresenze,"%");

}

if (isset($_POST['categoria'])) {

$colname_rsPresenze = (get_magic_quotes_gpc()) ? $_POST['categoria'] : addslashes($_GET['categoria']);

$query_rsPresenze = sprintf("SELECT * FROM presenze WHERE categoria Like '%s%s' ORDER by stagione ASC", $colname_rsPresenze,"%");

}

$query_rsPresenze = ("SELECT sum(presenze) AS totale_presenze WHERE giocatore Like '%s%s'");

mysql_select_db($database_pergocrema, $pergocrema);

$rsPresenze = mysql_query($query_rsPresenze, $pergocrema) or die(mysql_error());

$row_rsPresenze = mysql_fetch_assoc($rsPresenze);

$totalRows_rsPresenze = mysql_num_rows($rsPresenze);

Confesso di avere dei limiti e continuo a sperimentare per tentativi, ma dov'è l'errore? Grazie ancora per l'aiuto.

risposto 8 anni fa
gilfor
X 0 X

prova a cambiare:

$query_rsPresenze = ("SELECT sum(presenze) AS totale_presenze WHERE giocatore Like '%s%s'");

in

$giocatore = (get_magic_quotes_gpc()) ? $_POST['giocatore'] : addslashes($_GET['giocatore']);
$query_rsPresenze = "SELECT sum(presenze) AS totale_presenze WHERE giocatore Like '$giocatore%'";

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Non va ancora. Mi ritorna il seguente messaggio di errore:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE giocatore Like 'ragnoli%'' at line 1

Tieni presente che "ragnoli" è il cognome del giocatore che ho inserito come ricerca per prova, che nel database esiste (5 o 6 record).

Dài, ancora un piccolo sforzo...

risposto 8 anni fa
gilfor
X 0 X

si, ci siamo dimenticati il FROM...

$query_rsPresenze = "SELECT sum(presenze) AS totale_presenze FROM presenze WHERE giocatore Like '$giocatore%'";

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

 :'(Mi dispiace, ma non va ancora. Sono ormai frustrato: è dalle 2 di oggi pomeriggio che mi sto incaponendo sul problema. Aggiungendo la correzione che mi hai suggerito, mi visualizza la scheda vuota, senza il totale presenze nell'apposito campo, ma adesso addirittura anche senza alcuna riga di record. Help!

risposto 8 anni fa
gilfor
X 0 X

Ciao,

vediamo di venire un po' a capo di queste query su DB  O0

Non va ancora. Mi ritorna il seguente messaggio di errore:

You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near 'WHERE giocatore Like 'ragnoli%'' at line 1

Tieni presente che "ragnoli" è il cognome del giocatore che ho inserito come ricerca per prova, che nel database esiste (5 o 6 record).

Dài, ancora un piccolo sforzo...

La query con " LIKE 'ragnoli%' " ti trova solo i record in cui il cognome compare all'inizio della stringa. Nel caso in cui tu abbia una stringa con nome e cognome (es: massimo ragnoli) con la tua query non la troveresti.

Ovviamente come ha detto giustamente Gianni manca il FORM e il nome tabella.

$query_rsPresenze = ("SELECT sum(presenze) AS totale_presenze FROM presenze WHERE giocatore Like '%s%s'");
mysql_select_db($database_pergocrema, $pergocrema);

$rsPresenze = mysql_query($query_rsPresenze, $pergocrema) or die(mysql_error());
$row_rsPresenze = mysql_fetch_assoc($rsPresenze);
$totalRows_rsPresenze = mysql_num_rows($rsPresenze);

Questa porzione di codice è sintatticamente corretta ma non ti restituirà mai il dato "totale presenze" che tu stai cercando poiché il comando "mysql_num_rows" (man http://it2.php.net/manual/en/function.mysql-num-rows.php) ti restituisce il numero di righe del risultato della tua query.

Quello che ha te serve invece è scrivere questo:

$totale_presenze = $row_rsPresenze["totale_presenze"];

Per calcolare anche il numero di reti del giocatore da te cercato ti basterà scrivere questa query:

$query_rsReti = ("SELECT sum(reti) AS totale_reti FROM presenze WHERE giocatore Like '%s%s'");
$rsReti = mysql_query($query_rsReti, $pergocrema) or die(mysql_error());
$row_rsReti = mysql_fetch_assoc($rsPresenze);
$totale_reti = $row_rsReti["totale_reti"];

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

Per calcolare anche il numero di reti del giocatore da te cercato ti basterà scrivere questa query:

$query_rsReti = ("SELECT sum(reti) AS totale_reti FROM presenze WHERE giocatore Like '%s%s'");
$rsReti = mysql_query($query_rsReti, $pergocrema) or die(mysql_error());
$row_rsReti = mysql_fetch_assoc($rsPresenze);
$totale_reti = $row_rsReti["totale_reti"];

Attenzione, così la query contenuta in $query_rsReti viene inviata direttamente a mysql_query senza che i 2 %s vengano sostituiti dal cognome del giocatore.

Così dovrebbe essere corretto:

$giocatore = (get_magic_quotes_gpc()) ? $_POST['giocatore'] : addslashes($_GET['giocatore']);
$query_rsReti = "SELECT sum(reti) AS totale_reti FROM presenze WHERE giocatore Like '$giocatore%'";
$rsReti = mysql_query($query_rsReti, $pergocrema) or die(mysql_error());
$row_rsReti = mysql_fetch_assoc($rsPresenze);
$totale_reti = $row_rsReti["totale_reti"];

 :bye:

risposto 8 anni fa
Gianni Tomasicchio
X 0 X

Ciao Gianni, sono imbarazzato perché ormai mi sono convinto che il problema devo essere io, anziché il codice. Perciò credo sia meglio desistere, ...magari dopo l'ultimo tentativo. Ti riporto sotto l'ultima versione del codice, segnalandoti che così com'è, mi viene visualizzata sul browser la pagina senza alcun dato (né totali, né, soprattutto, il dettaglio dei record del nominativo selezionato. Se hai la bontà di dargli un'ultima spulciatina te ne sarei grato. Comunque ti ringrazio per la disponibilità.

$colname_rsPresenze = "";

$query_rsPresenze = sprintf("SELECT * FROM presenze WHERE giocatore Like '%s%s' ORDER BY stagione ASC", $colname_rsPresenze,"%");

if (isset($_POST['giocatore'])) {

  $colname_rsPresenze = (get_magic_quotes_gpc()) ? $_POST['giocatore'] : addslashes($_GET['giocatore']);

$query_rsPresenze = sprintf("SELECT * FROM presenze WHERE giocatore Like '%s%s' ORDER by stagione ASC", $colname_rsPresenze,"%");

}

if (isset($_POST['stagione'])) {

$colname_rsPresenze = (get_magic_quotes_gpc()) ? $_POST['stagione'] : addslashes($_GET['stagione']);

$query_rsPresenze = sprintf("SELECT * FROM presenze WHERE stagione Like '%s%s' ORDER by stagione ASC", $colname_rsPresenze,"%");

}

if (isset($_POST['categoria'])) {

$colname_rsPresenze = (get_magic_quotes_gpc()) ? $_POST['categoria'] : addslashes($_GET['categoria']);

$query_rsPresenze = sprintf("SELECT * FROM presenze WHERE categoria Like '%s%s' ORDER by stagione ASC", $colname_rsPresenze,"%");

}

$giocatore = (get_magic_quotes_gpc()) ? $_POST['giocatore'] : addslashes($_GET['giocatore']);

$query_rsPresenze = "SELECT sum(presenze) AS totale_presenze FROM presenze WHERE giocatore Like '$giocatore%'";

$query_rsReti = "SELECT sum(reti) AS totale_reti FROM presenze WHERE giocatore Like '$giocatore%'";

mysql_select_db($database_pergocrema, $pergocrema);

$rsPresenze = mysql_query($query_rsPresenze, $pergocrema) or die(mysql_error());

$row_rsPresenze = mysql_fetch_assoc($rsPresenze);

$totalRows_rsPresenze = mysql_num_rows($rsPresenze);

$totale_presenze = $row_rsPresenze["totale_presenze"];

$rsReti = mysql_query($query_rsReti, $pergocrema) or die(mysql_error());

$row_rsReti = mysql_fetch_assoc($rsPresenze);

$totale_reti = $row_rsReti["totale_reti"];

risposto 8 anni fa
gilfor
X 0 X

Ciao,

forse il problema sta nell'utilizzo simultaneo delle variaibili $_POST e $GET.

if (isset($_POST['giocatore'])) {

  $colname_rsPresenze = (get_magic_quotes_gpc()) ? $_POST['giocatore'] : addslashes($_GET['giocatore']);

$query_rsPresenze = sprintf("SELECT * FROM presenze WHERE giocatore Like '%s%s' ORDER by stagione ASC", $colname_rsPresenze,"%");

}

Dovresti scrivere:

$colname_rsPresenze = (get_magic_quotes_gpc()) ? $_POST['giocatore'] : addslashes($_POST['giocatore']);

e via di seguito con tutti gli altri.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X

Grazie del consiglio Zeta80. Ho sostituito come mi hai suggerito, ma purtroppo la mia tabella visualizzata riimane completamente vuota. Mi rassegno...

risposto 8 anni fa
gilfor
X 0 X

Ciao,

potresti mettere all'inzio del codice questi 2 comandi:

print_r($_POST);
print_r($_GET);

In questo modo visualizzi gli array contenenti le variabili di Post e di Get con i rispettivi valori.

Poi ti consiglierei di stampare la query "$query_rsPresenze" (echo $query_rsPresenze) così vedi se la query che esegui è corretta oppure no.

 :bye:

Zeta

risposto 8 anni fa
zeta80
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda