Boite de reception PHP

carterj Messages postés 45 Statut Membre -  
jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, j'ai besoin d'aide je créé un chat entre deux personne i fonctionne, mais je voudrais que l'utilisateur puisse avoir une sorte de boite de réception pour tout ces message.
j'ai déjà fait un petit bou de code qui récupéré les messages est le affiche

Mon problème : je veut juste récupéré le dernier message de chaque utilisateur avec qui il/elle a parler, est les afficher l'image en dessous,



au lieu d'afficher : Salut virginie sa va ?, et t'habite ou ? de raven.spencer je veux afficher juste T'habite ou ? qui est le dernier message  

3 réponses

  1. jee pee Messages postés 31875 Date d'inscription   Statut Modérateur Dernière intervention   9 977
     
    Salut,

    Tu n'a pas indiqué le contexte technique.

    Si tes messages sont enregistrés dans une base de données, pour avoir le dernier cela ressemble à cela :

    select .... from messages
    where ...
    order by date_msg
    limit 1 


    1
    1. carterj Messages postés 45 Statut Membre 1
       
      oui mes messages son dans une bdd , ta méthode sa limit le messages a 1 imagine si 5 personne lui on envoyer des messages par exemple cette méthode va afficher juste la dernière
      0
    2. carterj Messages postés 45 Statut Membre 1
       
      en gros c'est que je veux ce même si le même utilisateur lui a envoyer 15 message, je veux juste afficher sa dernière message idem avec touts les autres avec qui il a parler
      0
    3. jee pee Messages postés 31875 Date d'inscription   Statut Modérateur Dernière intervention   9 977 > carterj Messages postés 45 Statut Membre
       
      tu vois que tu n'as pas donné assez de détails au départ, il faut une question avec toutes les infos

      dans ce cas je ferais quelque chose comme

      select ... from message
      where (mesg_emetteur, date_mesg) in 
         (select mesg_emetteur, max(date_mesg) from message
          where mesg_dest= ...
          group by mesg_emetteur)
      and mesg_dest= ...
      0
    4. carterj Messages postés 45 Statut Membre 1
       
      j'essai sa merci
      0
    5. carterj Messages postés 45 Statut Membre 1
       
      sa marche mais sa m'affiche juste le dernier message d'un seul user je veux récupérer les dernières messages des tout les users qui lui on envoyer un message

        $msg = $db->prepare("SELECT * FROM chat_prive 
        LEFT JOIN users ON users.id = chat_prive.id_pseudo
        WHERE (id_to, date_message) 
        in (select id_to, max(date_message) 
        FROM chat_prive 
        WHERE id_to = '$user_one')");
      $msg->execute();
      $msg = $msg->fetchAll();
      
      0
  2. carterj Messages postés 45 Statut Membre 1
     
    la il m'affiche plus rien
    $msg = $db->prepare("SELECT * FROM chat_prive 
      LEFT JOIN users ON users.id = chat_prive.id_pseudo
      WHERE (id_pseudo, date_message) 
      in (select id_pseudo, max(date_message) 
      FROM chat_prive 
      WHERE id_to = '$user_one') 
      group by id_pseudo");
    $msg->execute();
    $msg = $msg->fetchAll();
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Bonjour,

      Déjà.... où as tu vu qu'on pouvait écrire un where de cette sorte
      WHERE (id_pseudo, date_message) 
        in (select id_pseudo, max(date_message) 
      

      A la limite:
      WHERE id_pseudo  in (select id_pseudo, max(date_message  FROM chat_prive )
      


      Tu t'en serais rendu compte si tu avais pris la peine de tester ta requête DIRECTEMENT dans ta BDD (via PHPMYADMIN par exemple).

      Ensuite, Tu n'as pas activé la gestion des erreurs PDO ni placé tes requêtes dans des blocs TRY/CATCH. je t'invite vivement à le faire pour détécter ce genre d'erreur.
      Voir ici pour les explications : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs

      Si, après ces corrections, le souci persiste, reviens nous voir avec :
      - Le code modifié (qu'on puisse voir comment tu as tenu compte de nos précédentes remarques)
      - Un "dump" de ta BDD ( structure + quelques données de test) que l'on puisse faire des essais de notre côté si besoin.
      Pour faire un DUMP en phpmyadmin : http://jc.etiemble.free.fr/abc/index.php/realisations/trucs-astuces/eximport-phpmyadmin

      .
      0
      1. jee pee Messages postés 31875 Date d'inscription   Statut Modérateur Dernière intervention   9 977 > jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention  
         
        Salut,

        C'est moi qui ai proposé
        WHERE (id_pseudo, date_message) 
          in (select id_pseudo, max(date_message) 


        Cela n'existe pas avec mysql ? Ce code fonctionne avec Oracle
        0
    2. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Alors en fait.... mea-culpa .... si.. c'est possible en mysql. (je ne pensais pas).

      Par contre ça ne change pas les autres remarques que j'ai fait. :-)
      0
  3. carterj Messages postés 45 Statut Membre 1
     
    sa marche toujours pas est oui j'ai activer les erreurs de pdo
    0
    1. jordane45 Messages postés 30426 Date d'inscription   Statut Modérateur Dernière intervention   4 830
       
      Montres ton code modifié
      Si tu as bien tout fait comme expliqué dans le lien...tu devrais avoir un message d'erreur sur ta requête !
      0