- Home
- Categorie
- Coding e Sistemistica
- MYSQL e altri Database
- struttura tabelle db mysql
-
struttura tabelle db mysql
Ciao a tutti, sto sviluppando un programmino in php per gestire una società calcistica.
Devo gestire 4 categorie con relative squadre, campi, calendari e classifiche.ad es: CategoriaA, squadraA, squadraB, squadraN, campoA, campoB, campoN, Incontro squadraA vs squadraB nel campoN etc.
Volevo un consiglio da voi per quel che riguarda la struttura del db,
che ho già creato, ma che mi crea qualche perplessità....Ho creato le stesse tabelle per ogni categoria, ad es:
Per la CategoriaA:
tabella CalendarioA, tabella SquadreA, tabella CampiAPer la CategoriaN:
tabella CalendarioN, tabella SquadreN, tabella CampiNLe tabelle sono semplicissime:
Tab Squadre:
idsquadra,
nome,
puntiTab Campi:
idcampo,
campoTab Calendario: (qui sorge il problema)
id,
giornata,
idsquadraA,
idsquadraB,
idcampo,
data,
risultatoVolevo chiedere se secondo voi sto operando bene perchè ho riscontrato un problema, nel senso che quando inserisco gli incontri, al posto dei nomi delle due squadre rivali, metto l'id di ognuna, nell'inserimento va tutto bene, il problema lo riscontro nella query di selezione.
Questo è lo script:
$query = "SELECT calendario.*, squadre.*, campi.* FROM calendario, squadre, campi WHERE calendario.giornata ='" . $_POST["giornata"] . "' AND squadre.idsquadra = calendario.idsquadraA AND squadre.idsquadra = calendario.idsquadraB AND calendario.idcampo = campi.idcampo ORDER BY data"; $result = mysql_query($query);
I risultati di squadre.idsquadra ovviamente si sovrappongono dandomi come output lo stesso nome.
So che è sbagliata la query, ma non sò come farla....sarà l'ora, sarò io...
Qualcuno potrebbe aiutarmi....?
Please?
-
Ciao delfy,
intanto io non duplicherei ogni tabella per ogni categoria. Se ho ben capito potrebbe bastare una tabella sola che contiene le categorie poi nelle tabelle opportune inserisci un idCategoria.Poi la query:
$query = "SELECT calendario.*, s1.*,s2.*, campi.* FROM calendario, squadre as s1, squadre as s2 , campi WHERE calendario.giornata ='" . $_POST["giornata"] . "' AND s1.idsquadra = calendario.idsquadraA AND s2.idsquadra = calendario.idsquadraB AND calendario.idcampo = campi.idcampo ORDER BY data"; $result = mysql_query($query);
in questo caso hai bisogno di inserire 2 volte la tabella squadre, una selezionerà la squadra A l'altra la B. Prima non andava xchè è impossibile che lo stesso record avesse idSquadra uguale sia a idsquadraA che idsquadraB
Cmq controlla anche la mia query che ho fatto al volo e potrebbe avere qualche problemino
ciao
-
ciao Riky, grazie per la risposta.
Ho cambiato la mia struttura perchè mi sembrava troppo contorta e l'ho fatta cosi:
squadre (idsquadra, idcategoria, squadra, punti);
campi (idcampo, idcategoria, campo)
categorie (idcaegoria, categoria)
incontri (idincontro, idcategoria, idsquadraH, idsquadraV, idcampo, giornata, turno, data, ora, golA, golB)tutto convergerà in Incontri.
in questo modo dovrebbe essere più lineare....
Che dici?ho però due quesiti:
Nella classifica, dovrò mettere le solite voci:
Squadra, PartiteGiocate, P.Vinte, P.Nulle, P.Perse, G.Fatti, G.Subiti.Non riesco a capire se conviene di più, anche in termini di prestazioni e velocità di calcolo, creare direttamente una tabella categoria con le suddette voci e l'idsquadra, o generarla ogni volta che la richiamo.
In quest'ultimo caso, dovrei salvare cmq i parametri Pgiocate, vinte, perse... nella tab. Squadre, o dovrei fare i calcoli ogni volta in base al risultato di ogni incontro?Grazie per l'aiuto...
-
il secondo quesito riguarda l'inserimento di più campi nel db.
Mi spiego meglio:
quando inserisco le squadre, vorrei effettuare l'operazione una volta sola e non squadra per squadra.
Non ho mai avuto questa esigenza, per cui sono andata a tentoni e questo è il codice.
Intanto ho creato uno script che mi mostra tanti campi input type per quanti ne scelgo:
definisci il numero delle squadre: <input type="text" name="num_s" size="3">
per far questo effettuo un ciclo for
for($i=1;$i<=$num_s;$i++){ echo ' <label><input type="text" name="squadra'.$i.'"> squadra '.$i.'</label> </p> <input type="hidden" name="i" value="'.$i.'"> <input type="hidden" name="num_s" value="'.$num_s.'">'; }
e per finire dovrebbe generare l'elenco delle squadre inserite ed inserirle a sua volta nel db, ma intanto ho fatto una prova per vedere cosa stampa a video, che effettivamente funziona, ma non sò se è corretto il mio metodo assolutamente creato ad intuito.
if($_POST["Submit"] == "Invia"){ $i = $_POST["i"]; $num_s = $_POST["num_s"]; for($i=1;$i<=$num_s;$i++){ $squadre = $_POST["squadra$i"]; $elenco_sq = array($squadre); print_r($elenco_sq); foreach($elenco_sq as $value){ print $i.$value." "; } }
ho fatto 2 prove di output. Il ciclo for mi stampa a video un array con indici tutti = [0] strano.
il foreach ovviamente assegna come valori il num progressivo per cui mostra $i squadra.
Prima di provare a scervellarmi con la query volevo avere la vostra opinione....grazie.
-
@Defly said:
Nella classifica, dovrò mettere le solite voci:
Squadra, PartiteGiocate, P.Vinte, P.Nulle, P.Perse, G.Fatti, G.Subiti.Non riesco a capire se conviene di più, anche in termini di prestazioni e velocità di calcolo, creare direttamente una tabella categoria con le suddette voci e l'idsquadra, o generarla ogni volta che la richiamo.
In quest'ultimo caso, dovrei salvare cmq i parametri Pgiocate, vinte, perse... nella tab. Squadre, o dovrei fare i calcoli ogni volta in base al risultato di ogni incontro?Grazie per l'aiuto...
secondo me ti conviene usare una tabella apposta per la classifica che va aggiornata per ogni partita. Questo anche per riuscire agestire meglio eventuali situazioni particolari come ad es. la penalizzazione e cose simili.
di fatto questa tabelle avrebbe una riga per ogni squadra che vai a aggiornare con un update.
Per la seconda domanda non ho ben capito se l'output che ottieni è giusto....
facci sapere
-
ciao riky, scusa il ritardo, ma ho dovuto consegnare alcuni lavori...
ho ripreso oggi il prg e non funziona, nel senso che l'output sembra corretto, questo è ciò che stampa con echo $query:INSERT INTO squadre (idcategoria, squadra) VALUES ('4' 'a')
INSERT INTO squadre (idcategoria, squadra) VALUES ('4' 'b')ma nel db non viene inserito alcun dato!!!
Sono sicura che il mio metodo per inserire un ciclo di dati non sia corretto.Mi aiuteresti??!
Grazie.
-
errorino di distrazione:
INSERT INTO squadre (idcategoria, squadra) VALUES ('4', 'b')
ti mancava una virgola
Comunque in generale per vedere l'errore di una query:
mysql_query($sql) or die(mysql_error())
in pratica vuol dire:
"se c'è un errore ferma tutto e mostrami l'errore"
-
grazie riky, non l'avrei mai notato, ma quindi dici che è giusto il codice?
quando si devono inserire gli stessi dati in un db, per evitare di eseguire sempre la stessa operazione, qual'è la formula base?
quella che ho fatto io (essendoci arrivata per logica) non ti sembra un po' contorta?
Ci sarà uno script più semplice!!