[RESOLU] Aide pour une requête :

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Aide pour une requête :

Re: Aide pour une requête :

par miiidooo19 » 24 juin 2013, 19:46

haha moogli c'est en retard oui ^^ mais heureusement le jury n'a pas fait gaffe aux dates afficher :)
C'est sûr que si j'étais dans le jury, je t'aurais pas raté :mrgreen: hi hi.

Hihi c'est peut être pour ça que tu es pas jury :lol:

Re: Aide pour une requête :

par sadeq » 18 juin 2013, 20:44

haha moogli c'est en retard oui ^^ mais heureusement le jury n'a pas fait gaffe aux dates afficher :)
C'est sûr que si j'étais dans le jury, je t'aurais pas raté :mrgreen: hi hi.

Re: Aide pour une requête :

par miiidooo19 » 18 juin 2013, 17:32

haha moogli c'est en retard oui ^^ mais heureusement le jury n'a pas fait gaffe aux dates afficher :)
par contre pour ma connaissance c'est pas trop tard :) je vais essayer ta solution et je te tien au jus :)

j'ai un probleme avec un site perso pour l'upload des video "voir le sujet" php-avance/upload-une-video-php-t268287.html

c'est un problème de timeout :s

Re: Aide pour une requête :

par moogli » 17 juin 2013, 23:37

sinon le plus simple, c'est la sous requete pour récupérer la date du dernier message du fil de discussion et order by cette colonne

par exemple :
select les,champs, (select max(dateMessage) from message where idfil =m.idfil  )
from message m
-- ajoute la jointure 

Mais bon je suppose qeu la c'est trop tard ;)


@+

Re: Aide pour une requête :

par sadeq » 17 juin 2013, 10:16

Salut. Alors donne nous les tables que tu as créées dans ta base pour corriger. Car je vois une table "Discussion" dans ta requête alors que ton MCD ne montre pas que cette table doit exister en tant que tel. Il y a donc un décalage net entre ton MCD et ton modèle physique (les tables de ta base)

Re: Aide pour une requête :

par miiidooo19 » 16 juin 2013, 21:54

Merci pour votre réponse
malheureusement je peux pas changer la structure de ma bdd :s demain j'ai mon oral pour présenter mon projet donc j'aurai pas tt le temps pour reprendre mes réquete sql :s

sinon pour mon cas comment je peux faire la même requête ?

Re: Aide pour une requête :

par sadeq » 16 juin 2013, 21:44

Bonjour,

Je ne suis pas d'accord avec ton MCD car tu n'as pas à gérer les envois et réception de messages mais les participation à une discussion. De ce fait, tu dois tout centraliser autours d'une entité "discussion" même si on peut dire qu'une discussion est un ensemble de messages. Ton modèle de données doit mettre en avant le fait qu'un utilisateur crée une discussion (sous forme de message initial) qui engendre des participations sous forme de réponses (messages concernant une discussion). Les messages de participation sont associés alors autour d'une discussion.

Ce qui donne le modèle MCD suivant :
http://dl.free.fr/fBCv7rMUH

Ce qui en découle le Modèle Relationnel de Données suivant : (les clés primaires sont en gras/souligné, les clés étrangères préfixées par un #)
utilisateur (idUtilisateur, nomUtilisateur, prenomUtilisateur, ...)
Discussion (idDiscussion, date, sujet, contenu, #idUtilisateur)
Participer (date, contenu, #idDiscussion, #idUtilisateur)

Selon ce modèle, la requête : récupérer toutes les discussions classées par date de dernier message ce fait comme ça :
SELECT Discussion.idDiscussion, Discussion.date, Discussion.sujet, Discussion.contenu,  u1.nomUtilisateur AS nomAuteur, u1.prenomUtilisateur AS prenomAuteur, Participer.date, Participer.contenu, u2.nomUtilisateur AS nomParticipant, u2.prenomUtilisateur AS prenomParticipant
FROM Discussion, utilisateur AS u1, Participer, utilisateur AS u2
WHERE  Discussion.idUtilisateur = u1.idUtilisateur 
AND Discussion.idDiscussion = Participer.idDiscussion  
AND  Participer.idUtilisateur = u2.idUtilisateur 

GROUP BY  Discussion.idDiscussion
ORDER BY Discussion.date DESC, Participer.date DESC;

Re: Aide pour une requête :

par miiidooo19 » 16 juin 2013, 21:19

une proposition ? c'est urgent

Aide pour une requête :

par miiidooo19 » 16 juin 2013, 17:01

Bonjour j'ai une requête n peu compliqué a faire :s et je retourne vers vous pour m'aider

j'ai deux tables utilisateur et message un utilisateur peut envoyer 0 ou N messages et un message concerne 2 utilisateur j'ai donc une table message avec deux clé étranger qui font référence a l'idUtilisateur (le premier comme émetteur et le 2eme comme destinataire ) ainsi qu'une association de parenté sur la table messager (en fait les message je les regroupe dans des discussion (donc un message appartiens a une et une seul discussion et une discussion peut contenir 1 ou N message) )

je vous laisse avec le mcd pour comprendre mieux ce que je disais
Image

ce que je voudrai faire si récupérer toutes les discussions classé par date de dernier message

j'ai essayé cette requete qui me renvoie 80% le résultat que je veux.
SELECT message.idDiscussion, sujet, dateMessage ,  u1.nomUtilisateur AS nomUtilisateur1, u1.prenomUtilisateur AS prenomUtilisateur1, u2.nomUtilisateur AS nomUtilisateur2, u2.prenomUtilisateur AS prenomUtilisateur2
FROM utilisateur AS u1, utilisateur AS u2, message
WHERE u1.idUtilisateur = message.idDestinataire
AND u2.idUtilisateur = message.idEmmeteur
AND (message.idDestinataire = 1 or message.idEmmeteur = 1)

GROUP BY idDiscussion
ORDER BY dateMessage DESC;
En fait cette requete me récupére tous les discussions avec un order par date desc comme vous le voyez dans l'image ci-dessus
Image

sauf que le classement il le fait par apport a les dates des premiers messages de chaque discussion et pas le dernier comme faire en compte que le classement se fait par la date de dernier message de chaque discussion ?

merci d'avance