Selezione sulla base di una data

la query dovrebbe essere ok (anche se inserendola su Mysql pur non evidenziando errori non mi seleziona nulla) ma non riesco ad avere una selezione: ricevo una pagina bianca anche se ad esempio il numero dei donatori (nel 2009 erano 2) me lo evidenzia (appare infatti 2)...
per semplicità ho indicato solo "2009" come anno, poi pensavo di sostituirla con una variabile $anno...
lo scopo della query dovrebbe essere quella di avere una lista di tutti i donatori che in un particolare anno abbiano versato piu' di 50 euro e con accanto la somma versata per quell'anno...
andrebbe bene anche se non fosse integrata con un form dove inserisco un dato anno, nel senso che se io ottengo questo da quella pagina:
id donatoreA 51 euro nel 2009
id donatoreB 60 euro nel 2008
ecc.

comunque ho provato a postare il codice che ho usato (come sempre mi appoggio a codici che ho già in archivio)...


<?php
$q = "SELECT
tot.nome, tot.totale
FROM
(SELECT tbldonatori.nomedonatore AS nome, tbldonatori.id, tbldonazioni.iddonatore, SUM(tbldonazioni.ammontare) AS totale
FROM tbldonatori
LEFT JOIN tbldonazioni
ON tbldonatori.id = tbldonazioni.iddonatore
WHERE
YEAR(data) = '2009'
GROUP BY tbldonatori.id
) AS tot
WHERE
tot.totale > 50";

$sql = mysql_query($q) or die ("Fout: " . mysql_error());
$row = mysql_num_rows($sql) or die ("Fout: " . mysql_error());


?>
<table>
<tr>
<th colspan="15" align="center">Numero Donatori: <? echo $row;?></th>

</tr>
<tr>
<td colspan="15">
<hr />
</td>
</tr>
<tr class="t_r">
<td class="t_k">
<strong>Numero</strong> </td>
<td class="t_k">
<strong>Nome</strong>
<td class="t_k">
<strong>Somma</strong> </td>
</tr>

<?php


while ($r = mysql_fetch_object($sql))
{


echo "<tr><td class='t_c'>" . $r->id . "</td>" ;
echo "<td class='t_c'>" . $r->nome . "</td>";

echo "<td class='t_c'>$sql </td>" ;





}
?>
</table>
 
Ultima modifica:
Ho riprovato la query e da me in locale funziona perfettamente. Nel mio DB di prova ho 2 donatori che nel 2009 hanno fatto donazioni per un totale che supera i 50 euro e li trovo correttamente.
Quindi, la mia prima domanda, per quanto banale, è se sei sicuro che nella tua base dati l'anno 2009 debba restituire dei risultati.
Hai provato ad eseguirla così com'è utilizzando ad esempio phpMyAdmin o altro client?
 
Prova ad effettuare una piccola modifica alla query:

Codice:
SELECT tot.id, tot.nome, tot.totale
FROM (
SELECT tbldonatori.nomedonatore AS nome, tbldonatori.id AS id, tbldonazioni.iddonatore, SUM(tbldonazioni.ammontare) AS totale
FROM tbldonatori
LEFT JOIN tbldonazioni ON tbldonatori.id = tbldonazioni.iddonatore
WHERE YEAR(data) = '2009'
GROUP BY tbldonatori.id) AS tot
WHERE tot.totale >50

Poi nel codice PHP che utilizzi per recuperare i dati dal resultset e creare la table prova così (a me funziona):

PHP:
while ($r = mysql_fetch_array($sql)) {
    echo "<tr><td class='t_c'>" . $r["id"] . "</td>" ;
    echo "<td class='t_c'>" . $r["nome"] . "</td>";
    echo "<td class='t_c'>". $r["totale"] ."</td></tr>" ;
}
 
siiiiiiiiiiiiiiiiiiiii2!!!!!!

:fonzie:
funziona!!!
da perderci la testa...se confronto i due codici non avevo richiamato correttamente i dati nella stampa dei risultati :*-(
inoltre vedo che hai usato mysql_fetch_array invece di object...
ora provo a vedere che succede se al posto dell'anno inserisco una variabile anno da inserire con un form...
grazie sempre per i preziosi consigli...
approfitto per rompere ancora su una cosa: esiste una funzione per fare in modo che i risultati che ottengo siano accompagnati da una numerazione?
ad esempio:
1 nomeA 60 euro
2 nomeB 54 euro
...
n/numero n/nome n/euro

guardavo sul sito php.net ma (sicuramente per mia imperizia) non ho trovato nulla...
con num_rows ottengo solo il numero totale delle righe non una sequenza...
 
Se vuoi semplicemente mettere un progressivo prima di ogni riga puoi fare così:

PHP:
$index = 1;
while ($r = mysql_fetch_array($sql)) {
    echo "<tr><td class='t_c'>" . $index++ . "</td>" ;
    echo "<td class='t_c'>" . $r["id"] . "</td>" ;
    echo "<td class='t_c'>" . $r["nome"] . "</td>";
    echo "<td class='t_c'>". $r["totale"] ."</td></tr>" ;
}

aggiungendo una colonna alla table.
 
Se vuoi utilizzare la funzione mysql_fetch_object() puoi fare così:

PHP:
while ($r = mysql_fetch_object($sql)) {
    echo "<tr><td class='t_c'>" . $r->id . "</td>" ;
    echo "<td class='t_c'>" . $r->nome . "</td>";
    echo "<td class='t_c'>". $r->totale ."</td></tr>" ;
}

Il problema di prima era che nella select non recuperavi il campo id.
 
Grandeeeeeeeee

:)
Va alla grande...
quindi bastava solo porre una variabile "1" e farla incrementare con ++...
dico "bastava" in senso ironico perchè io magari ci sarei forse arrivato dopo giorni...
certo che è affascinante lavorare con i codici anche se per chi come me ha sempre lavorato sul visuale all'inizio è un trauma...
ma quando hai la fortuna di trovare persone disponibili e competenti sui forum tutto diventa piu' facile...
adesso provo ad integrare il codice con la variabile anno ed aggiungere un link per generare e stampare una ricevuta per ogni utente...
bye
 

Discussioni simili