Boite de reception PHP

carterj Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   -  
jordane45 Messages postés 38486 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

jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   9 720
 
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
carterj Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   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
carterj Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   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
jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   9 720 > carterj Messages postés 44 Date d'inscription   Statut Membre Dernière intervention  
 
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
carterj Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   1
 
j'essai sa merci
0
carterj Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   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
carterj Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
jee pee Messages postés 41521 Date d'inscription   Statut Modérateur Dernière intervention   9 720 > jordane45 Messages postés 38486 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
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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
carterj Messages postés 44 Date d'inscription   Statut Membre Dernière intervention   1
 
sa marche toujours pas est oui j'ai activer les erreurs de pdo
0
jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 
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