Pagina 1 di 8 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 74
  1. #1

    Struttura database per forum

    Dovendo creare un forum contenente delle categorie, proprio come questo, che struttura è consigliabile adoperare per il database?

  2. #2
    scaricati i souces di questi forum e dai un'okkiata ai .sql
    Il 90% dei problemi di un pc si trova
    tra la tastiera e la sedia.

  3. #3
    Ho tentato questa via, ma i sorgenti SQL di questi forum contengono un sacco di campi, spesso dal significato incomprensibile, e comunque sono realizzati per funzioni che io non devo implementare. Tutto quello che a me serve è:

    Poter gestire delle "categorie", ovvero delle sezioni contenenti le discussioni. Memorizzare i messaggi e associarli all'autore, alla discussione e alla sezione di appartenenza...

  4. #4
    Utente di HTML.it L'avatar di pacoz
    Registrato dal
    Sep 2002
    Messaggi
    192
    se ho capito bene

    categoria -> forum -> discussione -> messaggio ?

  5. #5
    no no, le categorie fanno parte del forum. Avevo pensato ad una tebella messaggi, con tre campi aggiuntivi in cui memorizzare l'ID dell'utente, l'id della discussione e quello della categoria...

  6. #6
    bhe

    hai bisogno di 5 tabelle per la gestione dei post\forum

    Categorie:
    cid | parent | name | description | visible | creation_date

    cid -> INT(10) Primary Key UNSIGNED AUTOINCREMENT - è l'id della categoria
    parent -> INT(10) UNSIGNED - indica a quale categoria padre appartiene, se è zero vuol dire che è una categoria principale
    il resto si capisce...
    visibile -> TINYINT(1) UNSIGNED - serve a indicare se la categoria è visibile o meno (0 non è visibile 1 è visibile)
    creation_date -> INT(10) UNSIGNED - indica la data di creazione

    Forum:
    fid | cid | pos | name | description | visible | creation_date

    fid -> INT(10) Primary Key UNSIGNED AUTOINCREMENT - è l'id del forum
    cid -> INT(10) UNSIGNED - è l'id della categoria a cui appartiene il forum
    pos -> TINYINT(3) UNSIGNED - indica la posizione tra i forum (tiny int 3 è massimo 255, e credo ci bastino ^^)
    e poi il resto come su

    Threads:
    tid | fid | uid | titolo | descrizione | testo | visible | creation_date | modification_date

    dove tid è l'id (come su) fid è il forum di appartenenza, uid è l'utente a cui appartiene il 3d, poi creation_date e modification-date sono le date sempre in formato time stamp unix

    Post:
    pid | tid | uid | titolo | testo | visible | creation_date | modification_date

    come su ^^

    mmm poi ovviamente la tabella degli utenti
    e poi...le tabelle di sopra le devi ottimizzare tu creando i blocchi di chiavi in modo da fare tutto molto ottimizzato

  7. #7
    Ti ringrazio moltissimo, ora studio bene la struttura che hai proposto e vedo come adottarla e adattarla, visto che ad esempio a me le categorie non servono, quello che volevo dire era che servono diverse "sezioni", quindi secondo il tuo schema diversi forum...

    Mi sorgono alcune altre domandine: per ricavare i dati dell'utente che ha postato ogno messaggio (firma, avatar, numero di messaggi, ecc.) viene fatta una query per ogni visualizzazione di post, utilizzando lo stesso while che scorre l'array della query che ha estratto i messaggi? In altre parole, funziona così:
    Codice PHP:
    $query mysql_query("SELECT uid, titolo, testo FROM posts WHERE tid='2'");
    while (
    $array mysql_fetch_array($query)) {
    // Visualizzazione di titolo e testo del post
    $query2 mysql_query("SELECT nome,firma,messaggi,eccetera FROM utenti WHERE id='".$array['uid']."'");
    // Estrazione dei dati dell'utente

    O in un altro modo? Penso che il sistema che ho iluustrato effettua un pò troppe query, gravando sul DB e sui tempi di caricamento...

  8. #8
    dovresti studiare cosa sono le join

    altrimenti lanci il triplo delle query

    soprattutto usa sessioni su database

    http://www.mysql.com/doc/en/JOIN.html

    importante:
    usa principalmente mysql_unbuffered_query quando non devi eseguire dei cicli while nei quali estrai dati e li esegui altre query, e non lo puoi usare con mysql_num_rows

    (ti consiglio SEMPRE di usare il comando COUNT nella query, è MOLTO + veloce)

    inoltre struttura bene gli indici delle tabelle senno rischi di collassare tutto appena ci sono un po di utenti connessi

  9. #9
    Originariamente inviato da scitrek
    codice:
    $query = mysql_query("SELECT uid, titolo, testo FROM posts WHERE tid='2'");
    while ($array = mysql_fetch_array($query)) {
      // Visualizzazione di titolo e testo del post
      $query2 = mysql_query("SELECT nome,firma,messaggi,eccetera FROM utenti WHERE id='".$array['uid']."'");
      // Estrazione dei dati dell'utente
    }
    diventerebbe cosi:
    codice:
    $query = mysql_unbuffered_query("
      SELECT
        p.uid, p.titolo, p.testo,
        u.nome, u.firma, u.messagi
      FROM
        posts AS p
        LEFT JOIN utenti AS u ON u.id = p.uid
      WHERE
        p.tid='2';");
    
    while ($array = mysql_fetch_array($query)) {
      // Visualizzazione di titolo e testo del post
    }
    e li avresi tutti dentro $array

    ho messo la query cosi xche è + leggibile cmq può andare anche su un solo rigo :P

  10. #10
    Mi sto documentando riguardo JOIN, nel frattempo portesti illustrarmi il funzionamento delle "sessioni su database" e spiegarmi il funzionamento di quella query?

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 © 2024 vBulletin Solutions, Inc. All rights reserved.