• User

    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 CampiA

    Per la CategoriaN:
    tabella CalendarioN, tabella SquadreN, tabella CampiN

    Le tabelle sono semplicissime:

    Tab Squadre:
    idsquadra,
    nome,
    punti

    Tab Campi:
    idcampo,
    campo

    Tab Calendario: (qui sorge il problema)
    id,
    giornata,
    idsquadraA,
    idsquadraB,
    idcampo,
    data,
    risultato

    Volevo 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?


  • User Attivo

    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


  • User

    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...


  • User

    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&#40;$i=1;$i<=$num_s;$i++&#41;&#123;
    			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.'">';
    		&#125;
    

    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&#40;$_POST&#91;"Submit"&#93; == "Invia"&#41;&#123;
    	$i = $_POST&#91;"i"&#93;;
    	$num_s = $_POST&#91;"num_s"&#93;;
    	for&#40;$i=1;$i<=$num_s;$i++&#41;&#123;
    		$squadre = $_POST&#91;"squadra$i"&#93;;
    		$elenco_sq = array&#40;$squadre&#41;;
    		print_r&#40;$elenco_sq&#41;;
    		foreach&#40;$elenco_sq as $value&#41;&#123;
    			print $i.$value."
    ";
    		&#125;
    	&#125;
    

    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.


  • User Attivo

    @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

    :ciauz:


  • User

    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.


  • User Attivo

    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&#40;$sql&#41; or die&#40;mysql_error&#40;&#41;&#41;
    

    in pratica vuol dire:
    "se c'è un errore ferma tutto e mostrami l'errore"

    :ciauz:


  • User

    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!!