Realiser un systeme de messages

Salut à tous,
Je suis entrain de créer un forum pour étudiant, mais je suis confronté à une difficulté enorme sur les messages : ce que je veux c'st que quand quelqu'un clique sur message, on lui affiche les derniers messages triés biensur par destinataire, quand il click dessus il voit la discussion (un peu comme sur facebook) complète. Pas comme une simple boite de reception ou on ne trouve que les messages envoyés.
J'ai ma table messages
{
  • id
  • contenu
  • dest_id
  • receive_id
  • posted_at qui est du type datetime

}
jsé pas quoi faire, changer la structure de la table, ou il y aurait moyen d'ecrire une requete sql qui fasse le tout

4 réponses

  1. Salut,
    Quand on clique sur la personne ça nous ouvre la conversation avec la personne et on affiche tous les messages avec une boucle, en SELECT contenu WHERE received_id = nom de la personne.
    Je pense un truc dans ce genre
    1. Salut,

      Vu ta table actuelle, tu n est pas en mesure de gérer un fil de discussion vu qu il n y a pas de lien.

      Ce que cette table peu te permettre de faire c'est seulement permettre à deux personnes de discuter dans un fil unique (donc deux acteurs seulement avec un fil unique par couple).

      Si tu veux juste selectionner un fil, tu ferra:

      
      SELECT ID,contenu,receive_id,posted_at 
      FROM {nom de la table}
      WHERE receive_id = {id du receiver}
      AND dest_id = {id du destinataire} 
      ORDER BY ID 
      


      qui renverra la liste des message par ordre d insertion (donc chronologique).

      Par contre le nom des champs est mal choisi : d'une part un receiver et un destinataire, c'est la même chose (sender et receiver serai bien plus approprié), et dans le cas d'une conversation ca serai plutot des acteurs.

      Après il faut voir l insertion, il faudra peu être adapter la requête de select, par exemple faire :

      
      SELECT ID,contenu,receive_id,posted_at 
      FROM {nom de la table}
      WHERE receive_id in ({id acteur 1},{id acteur 2})
      AND dest_id in ({id acteur 1},{id acteur 2})
      ORDER BY ID 
      


      naga
      1. Salut,

        Il n y a pas de solution unique. Voila un petit exemple simpliste:

        table des clients

        <T_USER>
        USR_ID
        USR_NAME


        table des fils (ou un topic)

        <T_FIL>
        FIL_ID
        FIL_NAME
        USR_ID //creator


        table des Messages

        <T_MESS>
        MESS_ID
        CONTENT
        USR_ID
        FIL_ID


        ou pourrai aussi avir une table de souscription au fil pour recevoir des notification par exemple.

        Donc du coup au select on ferai
         
        
        SELECT f.FIL_ID,m.MESS_ID,m.CONTENT,u.USR_ID,u.USR_NAME
        FROM T_FIL f 
        JOIN T_MESS m ON f.FIL_ID = m.FIL_ID 
        JOIN T_USER u ON m.USR_ID=u.USR_ID
        WHERE f.FIL_ID={fil_id_cherché}
        ORDER BY m.MESS_ID
        
        


        Pour récupérer tout le fil.

        Mais ce n est qu un exemple avec un minimum de données, à toi de trouver une structure qui correspondra réellement à ce que tu veux faire.

        Naga