Visualizzazione risultati 1 fino 14 di 14

Discussione: [progetto] Realizzazione di un vocabolario in php mysql

  1. #1
    Guest

    Predefinito [progetto] Realizzazione di un vocabolario in php mysql

    Salve gente...
    Stò realizzando un vocabolario in php mysql e volevo rendervi partecipi della mia iniziativa.. (in seguito porterò il tutto su uno spazio av.. per fare un sito web)
    dunque per risolvere il problema ho deciso di fare un database "vocabbolario" con una sola tabella vocabbolo.
    Quindi:
    Codice:
    vocabbolo(idvocabbolo,parola,definizione,punteggio);
    dove idvocabbolo è pk.
    Quindi le query che verranno eseguite sono queste:
    Codice:
    insert into vocabbolo
    (parola,definizione)
    values(' ' , ' ');
    
    DELETE FROM vocabbolo
    where idvocabbolo =
    
    UPDATE vocabbolo
    SET parola = o definizione =
    where idvocabolo =
    
    select *
    from vocabbolo
    Bene..
    Allora bensì io sia in grado in php di realizzare qualcosina (inserimento, modifica, cancellazione dati) mi è sorto qualche dubbio:
    1 siccome il vocabbolario è pubblico una persona potrebbe mettere la parola x con una definizione.. un'altra la stessa parola x ma con un'altra definizione magari corretta magari esattamente l'opposto magari etc...
    in primis ho pensato di mettere un:
    Codice:
    alter table vocabbolo
    add definizione text
    quindi aggiungere "campi" definizione all'infinito..
    ma è del tutto inutile .. siccome la chiave primaria è la variabile idparola e non parola
    nulla mi vieta di poter mettere due volte la parola x poiche entrambe le parole inserite hanno id differenti..
    quindi mi è balsato in mente l'idea di creare una sorta di VOTAZIONE della definizione in php in modo tale che gli utenti votino la definizione che a loro sembra più bella o che semplicemente guardando il punteggio ottenuto dalla definizione scelgano di conseguenza a quale attingere e io quale cancellare di conseguenza.
    Ma non riesco a capacitarmi..
    come potrei risolvere?
    Ho pensato...
    tra vocabbolo e voto esiste un'associazione N a 1 quindi un vocabbolo ha più voti..
    quindi:
    Codice:
    vocabbolo(idvocabbolo,parola,definizione,punteggio,idvoto);
    voto(idvoto,votazione);
    Per la stampa potrei (in mysql) selezionare la media dei voti di quel vocabbolo e stamparli.. e per l'inserimento inserire un voto corrispondente alla parola x..
    ma non so come farlo in php.
    2 la modifica,cancellazione dei dati è una cosa che vorrei riservare ad un gruppo ristretto di utenti..
    ma la gestione degli utenti è una cosa che potremmo fare in secondo loco..
    grazie della gentile collaborazione
    saluti...
    EDIT:
    Questa è una piccola bozza di script php..
    che mi mostra il "vocabbolario"
    mi dovrebbe dare la possibilità di votare o vedere la media dei voti
    Codice PHP:
    <?php
    echo "estrazione dati<br>";
    $db = mysql_connect("localhost", "root", "si aspetta na.. ora te la dico la password...");

    mysql_select_db('vocabbolario', $db);

    $query = mysql_query("SELECT * FROM vocabbolo");
    //dovrei fare una queri che mi stampi parola per parola la media del punteggio
    //ad essa associato

    echo "<table border=\"1\">";

    echo
    "<tr>"."<td>indirizzo</td>"."<td>descrizione</td><td>punteggio</td><td>vota</td</tr>";

    while(
    $row = mysql_fetch_array($query, MYSQL_ASSOC)) {

    $parola = utf8_decode($row["parola"]);

    echo
    "<tr>";

    echo
    "<td>".$parola."</td>";

    echo
    "<td>".utf8_decode($row["definizione"])."</td>";
    echo
    "<td>".utf8_decode($row["punteggio"])."</td>";
    //qui dovrei inserire un qualcosa per far votare la definizione

    echo "</tr>";

    }

    echo
    "</table>";

    mysql_close($db);
    ?>
    Ultima modifica di atterzolivello : 04-03-2010 alle ore 20.05.56

  2. #2
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Vocabolo dovrebbe avere una sola b....
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  3. #3
    Guest

    Predefinito

    Si lo sò .. ho corretto il titolo del post..
    ma quello del topic è rimasto invariato..
    :)
    perdonate la mia distrazione..
    a volte gli "accenti" ti confondono.. (letta da me quella parola sembra proprio che abbia 2 b )

  4. #4
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    :D
    Cmq Un vocabolo ha più di una definizione, putresti tenere solo un campo definizione, ma poi dovresti ogni volta modificarlo.

    PS
    Non fai prima ad installare un Wiki?
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  5. #5
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    oppure in un'altra tabella "definizioni" crei un vincolo referenziale con l'attributo che identifica ogni termine, che su quest'ultima tabella avrà piu definizioni con la stessa chiave primaria.
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  6. #6
    Guest

    Predefinito

    Vorrei dilettarmi nell'apprendere..
    La mia tabella potrebbe funzionare..
    prendiamo in considerazione un vocabbolario di italiano
    id parola definizione
    1 pesca frutto del pesco
    2 pesca azione che indica il fatto di pescare, catturare pesci
    3 ancora 1 usata nelle navi per tener fermo lo scafo 2 usata per dire che qualcosa è già avvenuta
    4 ancora termine usato per indicare un'azione già avvenuta

    cioè un gruppo di utenti inserisce la parola ... con tante definizioni (potrebbe metterne 10 nello stesso campo vedi id 3) poi ogni utente mette una votazione.. magari potrei mettere un "segnala definizione già presente)
    a seconda della votazione o della segnalazione ricevuta io decido di cancellare o no quel id.
    se mettessi la parola come chiave primaria gran parte dei problemi sarebbero risolti..
    ma come dici giustamente tu dovrei fare un alter table ogni volta che un utente vuole aggiungere una definizione..
    e l'alter table che io sappia RISCRIVE l'intero campo NON si occupa di concatenazione di stringhe volendo mettere come ho messo nel id 3.

    Citazione Originalmente inviato da Xsescott Visualizza messaggio
    oppure in un'altra tabella "definizioni" crei un vincolo referenziale con l'attributo che identifica ogni termine, che su quest'ultima tabella avrà piu definizioni con la stessa chiave primaria.
    Plausibilie.. lo terrò in considerazione..
    sei un genio
    grazie
    alla fine se una parola è già esistente
    l'utente potra SOLO aggiungere una nuova definizione faceondo come dice xsescott
    EDIT:
    Avremmo quindi:

    vocabolo(idvocabolo,parola,iddefinition);
    voto(idvoto,votazione);
    definition(iddefinition,definizione,idvoto);
    Tra vocabolo e definition esiste un'associazione 1 a N
    Tra voto e definition esiste un'assiociazione 1 a N
    Ultima modifica di atterzolivello : 04-03-2010 alle ore 21.03.09

  7. #7
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    vabbè , genio!! ora non esageriamo...-.-°°°°

    mi basta un grazie ;)
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  8. #8
    Guest

    Predefinito

    Citazione Originalmente inviato da Xsescott Visualizza messaggio
    vabbè , genio!! ora non esageriamo...-.-°°°°

    mi basta un grazie ;)
    Grazie!
    Beh.. a questo punto .. visto che la parola deve essere unica e le definizioni molteplici posso permettermi di mettere parola come chiave primaria onde evitare ricerche e controlli sul fatto che la parola sia stata già inserita nel database? che ne dite?

    vocabolo(parola,iddefinition);---> parola è pk
    voto(idvoto,votazione);
    definition(iddefinition,definizione,idvoto);
    Tra vocabolo e definition esiste un'associazione 1 a N
    Tra voto e definition esiste un'assiociazione 1 a N
    __________________
    Ultima modifica di atterzolivello : 04-03-2010 alle ore 21.09.06

  9. #9
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    bhe, oppure aggiungi alla definizione della tabella il vincolo che l'attributo parola sia "unique" mantenendo sempre la chiave in forma numerica.
    Anche se a livello di effecenza credo sia meglio la tua soluzione ;)
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

  10. #10
    Guest

    Predefinito

    PROBLEMA IN UNA QUERY
    Vorrei fare una query che mi stampi la proiezione della parola "pesca" e della media dei voti di ogni definizione ad essa associata.
    Il database è quindi il seguente:
    (le pk sono in grassetto le fk sottolineate)
    vocabolo(parola)
    voto(idvoto,votazione,iddefinizione)
    definition(iddefinition,definizione,parola)
    La query ho pensato di farla cosi:
    SELECT definition.definizione,definition.parola,avug(voto .votazione)
    FROM definition,voto
    where voto.iddefinition=definition.iddefinition,parola=" pesca"
    group by voto.idvoto
    ma mi dà errore di sintassi:
    #1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'parola="pesca" group by voto.idvoto LIMIT 0, 30' at line 3

    In pratica vorrei che mi venisse stampata la parola, le sue definizioni ed affianco ad ogni definizione il punteggio da essa acquisito (la media del punteggio)
    grazie

  11. #11
    Guest

    Predefinito

    Ho risolto.. ecco la query esatta:
    Codice:
    SELECT definition.definizione,definition.parola,avg( voto.votazione)
    FROM definition,voto
    where voto.iddefinition=definition.iddefinition AND parola='pesca'
    group by (voto.idvoto)
    ma io non voglio che accada questo:
    definizione parola avg( voto.votazione)
    frutto del pesco pesca 2.0000
    frutto del pesco pesca 2.0000
    andare a pesca pesca 1.0000
    andare a pesca pesca 1.0000
    non c'è un modo per mostrarli una volta sola i campi uguali?

  12. #12
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    group by (definition.iddefinition)
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  13. #13
    Guest

    Predefinito

    Si.. infatti
    grazie sole binario..

    SELECT definition.definizione,definition.parola,avg(voto. votazione)
    FROM definition,voto
    where voto.iddefinition=definition.iddefinition AND parola='pesca'
    group by (definition.iddefinition)

    me l'ha detto anche la mia professoressa
    di fare così ma se non ricordo male mi ha detto di raggruppare anche per parola...
    comunque perche come ho fatto io non funziona?
    ciao

  14. #14
    L'avatar di Xsescott
    Xsescott non è connesso AlterGuru
    Data registrazione
    08-02-2004
    Messaggi
    1,413

    Predefinito

    ti spiego, la clausula group by ordina inizialmente in sottoinsiemi raggruppati per valore dell'attributo, per poi successivamente prendere quei sottoinsiemi dove vi applica l'operatore di aggregazione avg(o altro) per ognuno.

    ad esempio:
    nome , squadra, stipendio
    --------------------------
    pippo, milan, 400
    pluto,juve , 800
    poldo, milan, 400
    paperino,juve,100
    topolino,juve,800

    ora diciamo che vuoi fare la somma degli stipendi di tutti i giocatori per ogni squadra sarà:
    select squadra,sum(stipendio) form tab group by squadra

    succedera inizialmente questo:

    milan, 400
    juve , 800
    milan, 400
    juve,100
    juve,800

    poi vengono raggruppate per valore dell'attributo squadra:
    milan, 400
    milan, 400
    juve , 800
    juve,100
    juve,800

    e poi applicando l'operatore di aggregazione questo:
    milan, 800
    juve , 1700


    quindi ora se ragioni un pò, capirai perchè applicando il raggruppamento su idvoto, ti sarebbero aumentate le query all'aumento degli id dei voti ;)
    "Quando il potere dell'amore supererà l'amore per il potere il mondo conoscerà la pace" Jimmy Hendrix


    [ Richiesta: http://www.unibologna.eu/ ] --> [Risposta: http://www.magazine.unibo.it/Magazin...al_Portale.htm Morale] -->[ http://www.anti-phishing.it/news/art...s.13062007.php ]
    consoliwebsite.altervista.org

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •