Newsgroup: it.comp.www.asp
Titolo: gestione di una classifica

ciao, ho un dubbio. Per gestire una classifica di un campionato (le cui 
partite sono in una tabella di Access) pensavo di far calcolare il tutto 
direttamente sulla pagina asp. Oppure conviene fare tutto su database 
(creando una seconda tabella "classifica") e poi leggere con asp solo i 
dati dalla tabella?
Penso che la seconda ipotesi sia piů facile ma accetto consigli per 
facilitarmi la *colossale* (per me) opera. :-)
Grazie ciao Mark

 Grazie ciao Mark
Ciao
-- 
AZ [Microsoft - .NET MVP]
Mia Home page: 
http://ciclismo.sitiasp.it
Asp.Net community: 
http://www.aspitalia.com
Il mio blog: 
http://blogs.aspitalia.com/az

Mmmmm... ci provo...
Innanzitutto ripariamo al "danno" e creiamo una tabella verticalizzata
(termine testé inventato)
=================
select squadra_casa as nome_squadra, gol_casa as gol_fatti, gol_trasf as
gol_subiti from partite
union
select squadra_trasf as nome_squadra, gol_trasf as gol_fatti, gol_casa as
gol_subiti from partite;
=================
Questa query ti dà in sostanza una tabella lunga con, per ogni squadra, i
gol fatti e subiti ad ogni partita.
A questo punto si può iniziare a fare qualche conto:
=================
Select nome_squadra, count(*) as giocate, sum(gol_fatti) as
totale_gol_fatti, sum(gol_subiti) as totale_gol_subiti
from ==la query sopra==
group by nome_squadra;
=================
Quindi riassumendo, prova qualcosa di questo tipo:
=================
Select nome_squadra, count(*) as giocate, sum(gol_fatti) as
totale_gol_fatti, sum(gol_subiti) as totale_gol_subiti
from (
select squadra_casa as nome_squadra, gol_casa as gol_fatti, gol_trasf as
gol_subiti from partite
union
select squadra_trasf as nome_squadra, gol_trasf as gol_fatti, gol_casa as
gol_subiti from partite
)
group by nome_squadra;
=================
Ho messo le query giù un po' così, a manina. Provale una alla volta da
dentro Access e facci sapere.
Se va bene possiamo andare avanti e fare la sottigliezza sul conteggio
delle partite vinte, perse e pareggiate.
Alex.
-- 
___________________________________________________________
a p bertolini
(Tribù Digitale Blackmambo: 
www.blackmambo.it
)

 
Si per l'ordinamento farò così di sicuro.
Ma il problema grosso è cercare di fargli calcolare la classifica.
Nel senso che per ogni riga della tabella partite devo fargli aggiornare la
riga giusta della tabella con le squadre, ora sto cercando di capire come
fare il confronto tra stringhe per sapere come aggiornare i punti della
squadra giusta.
Ho trovato in rete una macro in Vb su excel per la gestione delle
classifiche ma non so come esportarla su access/asp.
òla
Mark

 
Allora: ho provato il tutto assieme.
Ho creato per semplicità iniziale un mini-campionato di 3 giornate.
Senza aver giocato una partita (quindi GolCasa e GolTrasferta) senza valore
risulta che tutte le squadre abbiano giocato 1 partita.
Dopo aver messo i valori della prima giornata le partite sono diventate 2 e
i GolFatti, GolSubiti sono giusti.
Dopo aver messo i valori della seconda giornata la tabella non viene
aggiornata perchè probabilmente risultano già 2 giornate giocate (??)
Alla terza giornata impazzisce tutto..
Alcune squadre risulta abbiano giocato 1 sola partita.
Alcune solo 2.
Nessuna 3 partite.
Non sono andato oltre.
Hai qualche consiglio sulle prove da fare?
Può dipendere dal tipo di dato? Ho controllato e GolCasa e GolTrasferta
sono numerici, mentre SquadraCasa e SquadraTrasferta sono di tipo testo.
Ciao Mark

L'errore stava nel fatto che la query tratta partite con lo stesso
risultato come se fossero una partita sola (è una DISTINCT implicita).
Modificando UNION in UNION ALL, funziona.
=========================
SELECT
    [elenco_partite].nome_squadra,
    Count(*) AS giocate,
    Sum([elenco_partite].gol_fatti) AS totale_gol_fatti,
    Sum([elenco_partite].gol_subiti) AS totale_gol_subiti
FROM
    [select
        squadra_casa as nome_squadra,
        gol_casa as gol_fatti,
        gol_trasf as gol_subiti
    from partite
    union all
    select
        squadra_trasf as nome_squadra,
        gol_trasf as gol_fatti,
        gol_casa as gol_subiti
    from partite
    ]. AS [elenco_partite]
GROUP BY [elenco_partite].nome_squadra;
=========================
Per sfizio mi sono creato un MDB di prova.
Questa è la tabella "partite":
=========================
giornata  squadra_casa  squadra_trasf  gol_casa  gol_trasf
1         scimmie       gorilla        2         0
1         bertucce      macachi        3         3
1         orangotango   scimpanzé      0         0
2         scimpanzé     bertucce       1         0
2         macachi       bertucce       1         0
2         gorilla       scimmie        4         5
3         scimmie       macachi        0         2
3         bertucce      scimpanzé      1         1
3         orangotango   gorilla        2         1
=========================
Questo è il risultato della query:
=========================
nome_squadra giocate totale_gol_fatti totale_gol_subiti
bertucce     4       4                6
gorilla      3       5                9
macachi      3       6                3
orangotango  2       2                1
scimmie      3       7                6
scimpanzé    3       2                1
=========================
Enjoy!


 Enjoy! 
Ciao, grazie mille, funziona correttamente.
C'è solo un piccolo problema. Risultano giocate anche le partite che ho
inserito in calendario delle giornate future.
Esempio
giornata  squadra_casa  squadra_trasf  gol_casa  gol_trasf
   4         scimmie      bertuccie
   4         orangotango  scimpanzè
dove gol_casa e gol_trasf sono posizioni vuote.
Non è proprio un grosso problema, ora come ora ho pensato di creare due
tabelle, la prima con tutto il calendario completo aggiornato con le
partite giocate e una seconda tabella (es partite2) dove creo una copia
delle partite dove gol_casa e gol_trasf non sono campi vuoti.
Anche se in questo modo raddoppio tutte le info sul database.
Ciao Mark
-- 
Annulla IL GOL per scrivermi in privato

 ho inserito in calendario delle giornate future.
Beh, se č per quello, basta inserire delle opportune clausole "WHERE", per
esempio verificando che il valore di gol_casa sia diverso da NULL:
=========================
SELECT
    [elenco_partite].nome_squadra,
    Count(*) AS giocate,
    Sum([elenco_partite].gol_fatti) AS totale_gol_fatti,
    Sum([elenco_partite].gol_subiti) AS totale_gol_subiti
FROM
    [select
        squadra_casa as nome_squadra,
        gol_casa as gol_fatti,
        gol_trasf as gol_subiti
    from partite
    WHERE not(isnull(gol_casa))
    union all
    select
        squadra_trasf as nome_squadra,
        gol_trasf as gol_fatti,
        gol_casa as gol_subiti
    from partite
    WHERE not(isnull(gol_trasf))
    ]. AS [elenco_partite]
GROUP BY [elenco_partite].nome_squadra;
=========================
-- 
___________________________________________________________
a p bertolini
(Tribů Digitale Blackmambo: 
www.blackmambo.it
)

 =========================
oh, yeas!
Quello che non ho capito è la parte [elenco_partite].nome_squadra (o le
altre). Cosa rappresenta elenco_partite? Serve per indicare il nome della
tabella che si viene a creare? perchè anche se la query l'ho chiamata
"prova" tutto sembra funzionare a dovere.
Scusa se ne approfitto...
Per quanto riguarda le partite vinte, pareggiate o perse è giusta come idea
creare 3 scelte date dalla differenza tra gol_casa e gol_trasferta?
gol_casa - gol_trasf > 0
gol_casa - gol_trasf = 0
gol_casa - gol_trasf < 0
E posso inserirle in SQL dopo il WHERE?
Perchè poi per calcolare i punti in classifica potevo semplicemente creare
una formula del tipo totale_punti = partite_vinte*3 + partite_nulle


 gol_trasferta?
Io pensavo a qualcosa del genere (temo che siamo bloccati su Access, non so
quanto le funzioni IIF e SWITCH siano SQL standard...)
SELECT
    [elenco_partite].nome_squadra,
    Count(*) AS giocate,
    Sum([elenco_partite].gol_fatti) AS totale_gol_fatti,
    Sum([elenco_partite].gol_subiti) AS totale_gol_subiti,
    sum(vinta) as vinte,
    sum(puntifatti) as punteggiototale
FROM
    [select
        squadra_casa as nome_squadra,
        gol_casa as gol_fatti,
        gol_trasf as gol_subiti,
        iif(gol_fatti>gol_subiti,1,0) as vinta,
        switch(gol_fatti>gol_subiti, 3, gol_fatti=gol_subiti, 1,
gol_fatti<gol_subiti,0) as puntifatti
    from partite
    union all
    select
        squadra_trasf as nome_squadra,
        gol_trasf as gol_fatti,
        gol_casa as gol_subiti,
        iif(gol_subiti>gol_fatti,1,0) as vinta,
        switch(gol_fatti>gol_subiti, 0, gol_fatti=gol_subiti, 1,
gol_fatti<gol_subiti,3) as puntifatti
    from partite
    ]. AS elenco_partite
GROUP BY [elenco_partite].nome_squadra;
Verifica bene i risultati, io non garantisco nulla :-))
Alex.
-- 
___________________________________________________________
a p bertolini
(Tribù Digitale Blackmambo: 
www.blackmambo.it
)

 quanto le funzioni IIF e SWITCH siano SQL standard...)
[CUT]
Funziona!
Ho solo sistemato un po' le cose, mi trovava qualche piccolo errore ma ho
risolto tutto. Ho calcolato anche le partite pareggiate, perse e la media
inglese (tanto capito come funziona lo Switch è tutto uguale..).
Grazie mille veramente, non puoi immaginare il sorriso che mi si è stampato
in faccia dopo aver visto che tutto funzionava!
Ciao Mark


 stampato in faccia dopo aver visto che tutto funzionava!
Figurati, č stata una bella sfida anche per me... :-))
Alex.
-- 
___________________________________________________________
a p bertolini
(Tribů Digitale Blackmambo: 
www.blackmambo.it
)