Précédent   Forum des professionnels en informatique > Bases de données > MySQL > Requêtes
Requêtes Forum d'entraide sur les requêtes MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/01/2012, 19h07   #1
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 54
Points : 13
Points : 13
Par défaut Messages privés - jointures

Bonjour,

EDIT:

J'ai modifié ma requête et j'ai essayé de joindre la table "notifications" dont le champ "reference" est l'id du thread (conversation privée) et le champ "user" est un string représentant la personne à qui est adressée la notification.

J'aimerais que pour chaque thread il y ait le nombre de notifications associées. L'idée c'est que le membre (dans la requête: n°44) qui visite sa boite de messages privés voie tout de suite combien de nouveaux messages il y a dans chacun des sujets de conversation.

Ma requête fonctionne sans le count() sur la table notifications...

Code :
1
2
3
4
5
6
7
8
 
SELECT DISTINCT t.thread_id,t.thread_title,t.thread_time,t.thread_first_post,t.thread_last_post,u.id,u.login,count(n.id) AS nb_notif
FROM mp_thread AS t
LEFT JOIN mp ON (mp.thread=t.thread_id)
LEFT JOIN user AS u ON (mp.mp_expediteur = u.id)
LEFT JOIN notifications AS n ON (n.reference=t.thread_id AND id_notif=2)
WHERE mp.mp_receveur=44
ORDER BY thread_last_post DESC
Comment adapteriez-vous la requête?

Nb: id_notif=2 représente une notification de type "message privé"

Merci pour votre aide

------------------------------------------------------------------------------------------------

Je code un système de messages privés pour mon site, affichant les résultats sous forme de sujets de conversation (threads) à la manière de gmail.

J'ai les tables:
- mp : messages privés
- mp_thread : listing des conversations (comprenant des messages privés)
- user : les membres du site

Table mp:
mp_id
thread
mp_expediteur
mp_receveur
mp_titre
mp_text
mp_time
mp_lu


Table mp_thread:
thread_id
thread_title
user_id
thread_time
thread_first_post
thread_last_post


Table user
id
login

J'aimerais lister les sujets de conversation en indiquant:
- le nombre de messages pas encore lus par l'utilisateur
- le titre de chaque conversation
- la date du dernier message posté dans la conversation
- la possibilité de supprimer une conversation (comme sur gmail: si je supprime ça ne veut pas dire que la conversation sera aussi supprimée pour l'autre personne de la conversation)
- les conversations avec messages non-lus sont placées en haut du listing
- quand on clique sur le titre d'une conversation, on arrive sur une page listant tous les messages de la conversation et on est dirigé automatiquement sur le premier message non-lu.
Sébastien L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 09h04   #2
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 669
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 669
Points : 2 680
Points : 2 680
bonjour,

comment sait-on qu'un message est nouveau ?
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 11h32   #3
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 54
Points : 13
Points : 13
Bonjour,

Un message est nouveau lorsqu'une notification est ajoutée dans la table "notifications" pour l'utilisateur "user" concerné et que le champ "lu" est à 0.

Cette table est caractérisée par les champs:

-id en auto increment
-id_notif: (le type de la notification: 1=commentaire de news, 2=message privé)
-user: la personne à qui est adressée la notification
- reference: ici le thread (sujet) qui a généré une notification car on y a ajouté un message privé
- lu : si la notification a déjà été lue ou pas par la personne "user"
- date : date de création de la notification
-dateLu: quand la notif a été lue

La création des notifications fonctionne, c'est le traitement des données qui me pose problème.

Merci
Sébastien L est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/01/2012, 11h36   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 669
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 669
Points : 2 680
Points : 2 680
Connaissez-vous le group by ? :http://sqlpro.developpez.com/cours/sqlaz/ensembles/

C'est ce qu'il vous faut pour traiter votre demande simplement.

Par contre une chose m'intrigue, vous dites :
Citation:
- reference: ici le thread (sujet) qui a généré une notification car on y a ajouté un message privé
Cela veut-il dire que nous pouvons avoir des références d'autre table que la table mp_thread la dedans ..?

edit: au vu de la colonne id_notif je dirai que oui, du coup j'me demande si vous n'avez pas modélisé tout ça un peu à l'arrache ? Typiquement votre référence devrait être une foreign key sur la table des mp_thread (son id) ou alors via héritage ... bref si vous ca vous interesse passez par le forum de modélisation.
punkoff est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/01/2012, 00h25   #5
Candidat au titre de Membre du Club
 
Inscription : février 2006
Messages : 54
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 54
Points : 13
Points : 13
Merci punkoff pour votre réponse et excusez-moi pour le retard. Je n'avais pas spontanément pensé à utiliser group by malgré que je connaissais. Ma messagerie privée fonctionne maintenant après avoir réglé de nombreux autres bugs Merci de m'avoir ouvert les yeux car en effet les notifications peuvent prendre des références différentes en fonction du champ id_notif. Je pensais avoir fait ça intelligemment, une petite remise en question s'impose.
Sébastien L est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h49.


 
 
 
 
Partenaires

Hébergement Web