Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617

    Consiglio su creazione tabella!

    Salve raga, mi servirebbe un aiutino per la creazione di una tabella mysql.

    Ho creato un sito per la mia squadra di calcio, e una tabella dove son9o riportate le generalità di ogni giocatore(nome, cognome, data di nascita ecc.).I dati di questa tabella vengono stampati a mio piacimento su un foglio che riporta per ogni giocatore i suddetti dati.Vorrei aggiungere anche la media voto di ogni giocatore.Tale media però vorrei farla calcolare da php prendendo i voti che io inserisco.Non so come proseguire.Darei per scontato che devo creare un'altra tabella dove inserire di volta in volta i voti ma non saprei come inserire(nella stessa tabella) il giocatore a cui appartengono senza creare una tabella speciica per ogni giocatore.
    Mi spiego meglio(o ci provo).Se creo una tabella voti e al suo interno i campi id,nome giocatore, voto.Ogni volta che devo inserire un voto dovrei riscrivere anche il nome giocatore e questo non credo vada bene.Se creo una tabella chiamata pincopallino(che sarebbe il nome giocatore), posso creare i campi id e voto e aggiornare di volta in volta, questo però significherebbe creare una tabella per ogni giocatore e manco mi piace.

    Come faccio a unire le due cose?Cioè avere una tabella con i nomi dei giocatori e per ogni giocatore una serie quasi infinita di voti(non saranno infiniti ma saranno parecchi).

    Spero non vi stia ponendo una domanda senza risposta!

    Grazie anticipatamente!

  2. #2
    tab giocatori:

    id giocatore, nome, cognome, ecc.
    1, mario, rossi, xx
    2, paolo, bianchi, xx

    tab: voti

    id voto, id giocatore, voto, ecc..
    1, 1, 6
    2, 1, 7
    3, 1, 8
    4, 2, 5.5
    5, 1, 8


    nelle pagine, una volta che hai selezionato l'utente mario rossi (id 1) estrarrai tutti i suoi voti (selec avg (voto) from voti where id giocatore = 1)

    ciao

  3. #3
    La tabella conviene che la fai così: id|id giocatore|voto.
    Mentre quella dei giocatori: id|nome|ecc.
    Poi estrai con il php tutti i voti del giocatore e fai la media.

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Scusate ma id voto e id giocatore cosa sarebbero?
    Sarà na sciocchezza ma proprio non c'arrivo(vai avedere che la vecchiaia mi stà attanagliando)!

    Poi così facendo, non devo fare una tabella per ogni giocatore?e' proprio quello che vorrei evitare!

  5. #5
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10
    Crei una tabella "giocatori":
    id, nome, cognome, numero ... e tutto quello che vuoi ma NON il voto.

    L'id è semplicemente un numero intero che identifica univocamente ogni giocatore, la chiave primaria insomma. Dovresti dichiarare questo campo "auto_increment" in modo che, ad ogni inserimento, tale numero si incrementi da solo, senza bisogno di essere definito nella INSERT.

    create table giocatori(
    id int unsigned auto_increment primary key,
    cognome varchar(30) not null,
    nome varchar(30) not null,
    numero tinyInt
    );


    Separatamente devi creare una tabella "voti". Perchè? Prova a ragionare sull'associazione che lega l'entità "voto" a quella "giocatore". A un singolo giocatore corrispondono più voti, un singolo voto corrisponde a un solo giocatore. Ciò significa che esiste un'associazione 1 a N rispettivamente tra giocatore e voto. Potresti anche memorizzare l'id del votante, in quel caso il modello E/R sarebbe questo:

    |giocatore| 1 ----- N |voto| N ------ 1 |votante|
    La tabella voti:

    create table voti(
    id int unsigned auto_increment primary key,
    idgiocatore int unsigned not null,
    voto tinyint not null
    );
    //a cui dovresti aggiungere idvotante se volessi rispettare il modello sopra... Potresti inoltre pensare di memorizzare altre informazioni, tipo la data e l'ora in cui è stato dato il voto, aggiungendo un campo datetime, o meglio ancora un intero per il timestamp (magari non sai manco cos'è, ma almeno ti dò lo spunto, in rete trovi tutto).

    Si dice che idgiocatore è una chiave esterna (foreign key). Non mi và di spiegare , vatti a studiare tutto!


    Per avere la media di tutti i voti riferiti a un giocatore:

    SELECT AVG(voto)
    FROM giocatori, voti
    WHERE giocatori.id = voti.idgiocatore // quì operi un innerjoin, una congiunzione fra le tabelle
    AND giocatori.id = <idgiocatore>

    dove <idgiocatore> è l'id del giocatore di cui ti interessa la media dei voti.

  6. #6
    Utente di HTML.it
    Registrato dal
    Dec 2008
    Messaggi
    10
    Ops, sbagliata la query ahuahuahau, e non riesco a modificare il messaggio .

    SELECT AVG(voto)
    FROM voti
    WHERE idgiocatore =<idgiocatore>


    Devi effettuare la congiunzione nel caso volessi recuperare in una query, anche i dati residenti nella tabella giocatori, tipo nome e cognome. In quel caso, potresti fare:

    SELECT Cognome, Nome, AVG(voto) AS Media_voti
    FROM giocatori, voti
    WHERE giocatori.id = voti.idgiocatore
    AND idgiocatore =<idgiocatore>

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2009
    Messaggi
    617
    Allora avrei fatto così, ma non mi convinve, anche perchè non mi funge):

    $lettura_risultati=mysql_query ("SELECT AVG(voto) FROM voti INNER JOIN giocatori WHERE giocatori.id=voti.id_giocatore");

    Così,ovviamente, non mi restituisce un piffero, per farmi restituire qualche cosa(giusto per capire se funziona ci metto

    echo"$lettura_risultati";

    e mi ridà: Resource id #3

    Dalle esperienze passate direi che è un buon segno, sarei sulla via giusta(almeno credo).

    Per rendere quel Resource id #3 un dato leggibile e comprensibile diciamo avrei aggiunto un ciclo while: while($scatola_temporanea=mysql_fetch_array($lettu ra_risultati)){
    $prova=$scatola_temporanea['id_giocatore'];

    echo"$prova";}

    Ovviamente mi da errore, ho provato a cambiare con voti.id_giocatore ma niente da fare mi da errore sulla linea del ciclo while.
    Mi sono perso, non ci stò capendo più un piffero Help!

    Grazie anticipatametne.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.