ti conviene pensare a questo passo mentre pensi al DB ...
Allora, io farei così:
una tabella Incontro:
codice:
CREATE TABLE `Incontro` (
`id` INT NOT NULL AUTO_INCREMENT,
`casa` VARCHAR(100) NOT NULL,
`ospiti` VARCHAR(100) NOT NULL,
`punteggioCasa` INT NOT NULL,
`punteggioOspiti` INT NOT NULL,
`risultato` ENUM('1','2','X') NOT NULL DEFAULT 'X',
`id_giornata` INT NOT NULL,
PRIMARY KEY (`id`)
)
CHARACTER SET utf8;
Dai un occhiata a questa tabella:
L'incontro (la partita, io l'ho chiamato incontro, ma tu puoi dargli il nome che vuoi) avrà un Identificatore Primary KEY (id) che significa che sarà unico e verrà usato per le ricerche nella tabella.
Poi gli ho messo 2 varchar (casa e ospiti) che sono i nomi delle squadre che hanno giocato, poi il punteggio di ogni squadra (come INT).
Il risultato mi sembra una buona idea per permettere di fare ricerche intuitive, ma in effetti puoi evitarlo facendo query apposite (cioè se punteggioCasa > punteggioOspiti sarà 1, < sarà 2, X altrimenti), potresti fare anche una procedura puramente SQL per inserire il risultato a partire dai dati della riga, ma è roba un po' avanzata, per questa versione è meglio se lo togli.
L'ultima riga "id_giornata" necessita una piccola spiegazione:
Io penso che, in una determinata giornata, potrebbero avvenire anche altre cose che non rigurdano la partita in generale, o comuque che non avrebbero senso nella tabella dell'incontro (che indica che partita c'è stata ed il punteggio). Per esempio potresti voler stilare la lista dei Gol della giornata, oppure, degli acquisti o prestiti (che non c'entrano con le partite). A questo proposito ti consiglio di creare un'altra tabella Giornata:
codice:
CREATE TABLE `Giornata` (
`id` INT NOT NULL AUTO_INCREMENT,
`data` DATE NOT NULL COMMENT ' ',
PRIMARY KEY (`id`)
)
CHARACTER SET utf8;
Comq puoi notare, non ho messo praticamente niente solo l'id e la data della giornata. Quando andrai a visualizzare le partite per una determinata giornata, andrai ad indicare l'Id della giornata stessa, durante la query:
"SELECT * FROM Incontro WHERE id_giornata = $id_giornata"
In questo modo otterrai tutti gli incontri per una determinata giornata.
Vuoi fare la classifica dei punti in base hai gol:
fai così: metti di avere il nome delle squadra salvato in $squadra:
"SELECT punteggioCasa FROM Incontro WHERE casa LIKE '$squadra'" e "SELECT punteggioOspiti FROM Incontro WHERE ospiti LIKE '$squadra'"
La somma di questi risultati ti darà il totale dei gol (di TUTTE le giornate, se invece vuoi solo per alcune giornate fai "SELECT punteggioCasa FROM Incontro WHERE Incontro.casa LIKE '$squadra' AND Giornata.data >= '2008-01-01' AND Giornata.data <= '2008-12-31' AND Giornata.id = Incontro.id_giornata" per avere i gol solo del 2008)
Questo sistema è chiamato, database relazionale, cioè si crea una relazione tra Incontro e Giornata in modo che i dati siano distributi su due tabelle e tu non abbia bisogno di replicare tutti i dati della tabella giornata nella tabella incontro. Inoltre, questo sistema, permette di legare la tabella giornata ad altre (tipo i Gol)
codice:
CREATE TABLE `Gol` (
`id` INT NOT NULL AUTO_INCREMENT,
`giocatore` VARCHAR(200) NOT NULL,
`id_incontro` INT NOT NULL,
`tempo` INT NOT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `incontro` FOREIGN KEY `incontro` (`id_incontro`)
REFERENCES `Incontro` (`id`)
ON DELETE CASCADE
)
CHARACTER SET utf8;
Questa tabella conterrà ogni gol fatto,ciascun gol avrà il nome del giocatore, ed il tempo (da 0 a 90, o 120 in caso di supplementari) passato dall'inizio.
Colgo l'occasione per mostrarti una particolarità dei DB relazionali: le FOREIGN KEY.
Possiamo dire con tranquillità che se non esiste l'incontro, non esiste il Gol. Per questo motivo, ho indicato una Foreign Key sul campo id_incontro legata al campo id di Incontro con regola DELETE CASCADE , significa che, se cancelli l'incontro corrispondente, anche tutti i gol legati a quell'incontro verranno cancellati.
Possiamo fare lo stesso per gli incontri sulle giornate: se non esiste la giornata come può esistere l'Incontro?
Si può fare allora:
codice:
ALTER TABLE `Incontro` ADD CONSTRAINT `giornata` FOREIGN KEY `giornata` (`id_giornata`)
REFERENCES `Giornata` (`id`)
ON DELETE CASCADE;
Non ho fatto altro che aggiungere una Foreign Key ad Incontro, tale che se una Giornata viene cancellata, tutti gli incontri legati a quella giornata (con id_giornata = all' id della giornata cancellata) vengono a loro volta cancellati e, di consequenza, tutti i Gol legati a quell'incontro vengono cancellati automaticamente.
le Foreign Key sono uno strumento potentissimo per evitare di lasciare nel DB dati inutili.
Ora, a te la scelta, vuoi parlare dell'interfaccia in PHP o hai in mente altre possibilità da implementare?