Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Messaggi privati tra utenti amici..Teoria..

    Ciao ragazzi! Sto creando un sistema di messaggi privati solamente tra persone che sono amici in una community... logicamente l'utente invia un messaggio al quale poi riceverà una risposta e dove possono susseguirsene altre... (tipo netlog)

    Spiego meglio

    Io invio un messaggio all'utente xxx

    --> titolo: Cena!
    --> mess: Stasera grande cena vengono anche er frappa e pino vieni?

    lui risponde a questo messaggio

    -->mess: certo dimmi l'ora

    io rispondo a mia volta

    -->mess: ho già prenotato,alle 8:30 ad ariccia



    insomma con questo voglio dire che partendo da un messaggio madre con titolo e testo voglio poi avere in cascata tutte le risposte ad esso relative...quindi io ho pensato di creare 2 tabelle nel database in questo modo:


    tabella1 ---> messaggio_privato

    id_messaggio|id_utente_sender|id_utente_ric|titolo _messaggio|messaggio|data_ora_messaggio|letto_send er|letto_ric



    tabella2 ---> Risposte_messaggio

    id_risposta|id_messaggio(chiave esterna della prima tabella)|id_utente|risposta_messaggio|data_ora_ris posta|letto



    secondo voi è giusta la logica??
    Grazie anticipatamente!!

  2. #2

    Re: Messaggi privati tra utenti amici..Teoria..

    Originariamente inviato da webking2003
    Ciao ragazzi! Sto creando un sistema di messaggi privati solamente tra persone che sono amici in una community... logicamente l'utente invia un messaggio al quale poi riceverà una risposta e dove possono susseguirsene altre... (tipo netlog)

    Spiego meglio

    Io invio un messaggio all'utente xxx

    --> titolo: Cena!
    --> mess: Stasera grande cena vengono anche er frappa e pino vieni?

    lui risponde a questo messaggio

    -->mess: certo dimmi l'ora

    io rispondo a mia volta

    -->mess: ho già prenotato,alle 8:30 ad ariccia



    insomma con questo voglio dire che partendo da un messaggio madre con titolo e testo voglio poi avere in cascata tutte le risposte ad esso relative...quindi io ho pensato di creare 2 tabelle nel database in questo modo:


    tabella1 ---> messaggio_privato

    id_messaggio|id_utente_sender|id_utente_ric|titolo _messaggio|messaggio|data_ora_messaggio|letto_send er|letto_ric



    tabella2 ---> Risposte_messaggio

    id_risposta|id_messaggio(chiave esterna della prima tabella)|id_utente|risposta_messaggio|data_ora_ris posta|letto



    secondo voi è giusta la logica??
    Grazie anticipatamente!!

    Devi usare per forza DB?

  3. #3
    Beh si,ho tutta la community impostata nel db..

  4. #4
    Molto semplicemente inserisci un campo che chiami MessageUniqueId ed usi per identificare le conversazioni.

    Questo campo lo valorizzi al primo invio, quando rispondi ad un messaggio privato reinserisci l'identificatore ... quando vuoi leggere tutti i messaggi estrai quelli con un dato identificatore ordinati in ordine cronologico e sei apposto
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    capito praticamente gli assegno un altro id (come id messaggio) di modo che poi quando rispondo a quel messaggio, nel campo gli inserisco l'id di quello principale e logicamente ordinandoli per data mi esce per forza fuori il primo...Casomai tocca che metto il campo titolo a null e faccio i controlli per fare in modo che in una nuova discussione lo inserisce mentre negli altri no..

  6. #6
    si qualcosa del genere

    se il codice per l'invio del nuovo messaggio è uguale a quello di risposta, molto semplicemente, metti, nella risposta, un campo che indica l'id del messaggio al quale si sta rispondendo (non per forza il primo dell'elenco)

    il sistema, quando riceve il tutto, estrae dal db il codice identificativo della discussione collegato al messaggio al quale si sta rispondendo e lo utilizza anche per la risposta ... se invece il campo manca lo genera e lo inserisce

    ti conviene utilizzare un valore non progressivo, un codice, che puoi generare per comodità o tramite un MD5 o con un CRC32 se vuoi sempre un numero

    con md5 fai il campo char(32) e usi
    md5(uniqid(microtime(), true))

    mentre con CRC32 fai un campo INT(10) UNSIGNED e fai
    sprintf('%u', crc32(uniqid(microtime(), true)))
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    quindi vediamo se ho capito alla perfezione...ricapitoliamo...(che pazienza che avete )
    creo un'unica tabella

    tabella ---> messaggio_privato

    id_messaggio|MessageUniqueID|id_utente_sender|id_u tente_ric|titolo_messaggio|messaggio|data_ora_mess aggio|letto_sender|letto_ric


    quando io creo un nuovo messaggio e lo invio succederà questo:

    id_messaggio si creerà da solo e si autoincrementerà
    MessageUniqueID si creerà attraverso la funzione del CRC32
    (gli altri campi si inseriranno in base all'user ecc)




    quando invece io rispondo ad un messaggio accadrà:

    id_messaggio si creerà da solo e si autoincrementerà
    MessageUniqueID sarà quello preso dal messaggio iniziale
    titolo messaggio non lo chiedo perchè nella risposta non serve ed è impostato su null
    e vabbè gli altri campi si inseriscono in base alle varie cose..


    Così??

  8. #8
    ....up....

  9. #9
    Ho dovuto aggiungere un campo chiamato "primo" per riconoscere che è il messaggio di inizio della discussione e quindi per distinguerlo dalle risposte.. Cioè quando invio il messaggio per iniziare una nuova discussione questo campo mi si setterà a 1 mentre se io semplicemente rispondo questo sarà 0... Che ne pensate? Altrimenti con la select non sapevo proprio come recuperarlo!

  10. #10
    Ma scusami, c'è qualcosa di sbagliato nel tuo ragionamento, perché ti serve sapere qual'è il primo dei messaggi?

    E se proprio non ne puoi fare a me non sarebbe meglio variare l'id unico della discussione facendolo corrispondere all'id del primo messaggio cosi da evitare l'inclusione di un ulteriore campo, aumentando la complessità della logica del software?

    PS: se ordini i dati per ordine cronologico e metti un LIMIT 1 ottieni il primo messaggio dell'elenco

    PS2: ovviamente non eliminare mai i messaggi ma metti un flash che indichi eliminato

    PS3: per il flag si/no si usano gli ENUM o, se ti fanno antipatia, i TINYINT(1) su 1 o 0
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

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.