Newsgroup: it.comp.www.php
Titolo: Problema classifica avulsa

Salve a tutti,
gestisco il sito di una società di basket amatoriale
(
www.rondinellabasket.com
) e sono un autodidatta in quanto a PHP.
Sono riuscito a trasformare il sito da HTML puro (con tutto quel che ne
conseguiva in termini di aggiornamento) a PHP con supporto di un DB MySQL,
scrivendo tutte le routine necessarie all'inserimento e alla gestione deidati
delle varie squadre della società.
Mi sono scontrato da qualche giorno con un problema: la Classifica Avulsa.
Questo termine indica l'ordine in cui devono essere messe le squadre a pari
punti e viene determinato in base agli scontri diretti (2 punti per ogni
scontro vinto) e ordinare le squadre (a pari punti nella classifica generale)
in base ai punti della classifica avulsa.
In caso di ulteriore parità si devono prendere i canestri fatti e subiti
(sempre negli scontri diretti) e calcolare il Quoziente Canestri con la
formula qc = c.fatti / c.subiti e ordinare le squadre (a pari punti nella
classifica avulsa) in base al Q.C.
Tramite una query SQL attualmente ottengo una classifica ordinata in baseai
punti (DESC), partite giocate (ASC) ,differenza canestri generale (DESC) che
però non risponde ai requisiti appena indicati.
Il problema in questione sorge dovendo calcolare questa benedetta classifica
avulsa, e non riesco (date le mie non eccelse conoscenze di programmazione) a
venirne a capo.
La classifica generata risiede in un array così composto (il numero di squadre
non è fisso):
- ID squadra
- Nome squadra
- Punti
- Partite giocate
- Vinte
- Perse
- Canestri fatti
- Canestri subiti
È possibile ovviamente leggere il DB per estrarre i dati relativi agli scontri
diretti tra le squadre a pari punti, leggendo i canestri (0 a 0 se non ancora
disputata), ma non so come organizzare lo script, visto che non conosco a
priori QUANTE squadre sono a pari punti (saprei come farlo se le squadre a
pari punti fossero solo 2).
Qualche anima pia ha già qualcosa di utile a risolvere il mio problema o
indicarmi come realizzare lo script tenendo conto delle indicazioni date?
Grazie per qualsiasi aiuto
Excalibur

Per chiarire ulteriormente la questione, a questo URL:
http://www.rondinellabasket.com/squadre/classificanewgenerale.php?op=1
trovate la classifica degli Under 19, dove ci sono 3 squadre (Novate, Bresso e 
Seveso) a 18 punti, attualmente ordinate per la differenza canestri.
Secondo la classifica avulsa l'ordine dovrebbe essere invece:
1° Seveso 6 punti (vinti entrambi i match con Bresso e 1 contro Novate)
2° Novate 4 punti (vinto 1 contro Seveso e 1 contro Bresso)
3° Bresso 2 punti (vinto 1 contro Novate)
E questo è un caso "semplice" :)
Nella classifica degli Under 17 c'è la probabilità che 3 squadre finiscano il 
campionato al primo posto a 26 punti e anche a pari punti nella classifica 
avulsa (ogni squadra ha vinto 1 scontro diretto e perso l'altro), quindi si 
dovrà ricorrere al Quoziente Canestri (relativamente agli scontri diretti).
Grazie ancora per la pazienza
Excalibur

 - Canestri subiti
In che senso non è fisso? se il campionato è a 20 squadre (ad es.) non 
hai sempre 20 elementi nell'array.
Ma comunque, visto che abbiamo sto array, lo ordinerei in base ai punti 
e agli altgri criteri generali (partite giocate, etc..). Quindi lo 
scorrerei per trovare i gruppi di squadre con punteggio uguale e poi 
interrogherei di conseguenza i db per fare la classifica avulsa tra solo 
queste squadre considerando ovviamente solo le partite tra loro giocate 
(che stringi stringi sarebbe la avulsa no?).

 (che stringi stringi sarebbe la avulsa no?).
Si, e qui mi inchiodo, nel senso che non so come strutturare il codice
per farlo. Lo scoglio è il non sapere a priori quante sono le squadre
in situazione di parità ... se fossero solo 2 probabilmente saprei
come farlo, ma non 3 o più squadre brancolo nel buio.
Per completezza riporto l'estratto dal regolamento della Lega Basket
al riguardo:
Per stabilire l'ordine delle precedenze, quando si verifica una parità
di punteggio nella classifica finale di campionato, si dovranno
applicare i seguenti criteri:
A) PARITA' TRA DUE SQUADRE
1) In caso di parità di classifica tra due sole squadre, la precdenza
sarà attribuita alla squadra con il maggior numero di vittorie negli
incontri dirette tra le anzidette squadre.
2) Qualora le due squadre risultino aver conseguito un ugual numero di
vittorie negli incontri diretti, la precedenza di classifica verrà
attribuita alla squadra con un maggior Quoziente Canestri, calcolato
dividendo il totale dei punti segnati per il totale dei punti subiti
da ciascuna squadra negli incontri diretti.
3) Qualora il totale dei punti segnati e il totale dei punti subiti
coincidano, la precedenza di classifica verrà attribuita alla squadra
con il maggior Quoziente Canestri, calcolato dividendo il totale dei
punti segnati per il totale dei punti subiti in tutti gli incontri del
campionato.
B) PARITA' TRA TRE O PIU' SQUADRE
1) In caso di parità di classifica tra tre o più squadre, per
determinare la precedenza, si dovrà procedere alla compilazione di una
classifica avulsa tra tutte le squadre terminate a pari punti, tenendo
conto dei soli risultati degli incontri diretti tra le squadre
anzidette.
2) Qualora risultasse un'ulteriore parità nella classifica avulsa, la
precedenza sarà attribuita alla squadra con il maggior Quoziente
Canestri, calcolato dividendo il totale dei punti segnati per il
totale dei punti subiti, limitatamente agli incontri diretti tra le
squadre in parità nella classifica avulsa.
3) Qualora risultasse una ulteriore situazione di parità, la
precedenza dovrà essere attribuita alla squadra con il maggior
Quoziente Canestri, calcolato come detto precedentemente, tenendo
conto di tutte le gare del campionato.