Vous n'êtes pas identifié(e).
Bonsoir,
J'ai réalisé une petite gestion de message avec deux tables.
La table "postit" contient les message des utilisateurs et la table "postit_vu" contient les ID des personnes qui ont vu les messages.
Il y a donc une requête qui affiche les messages avec dans chacun d'eux le nom des personnes qui l'ont lu.
Y a t'il un moyen de dire dans une requête sql sans avoir besoin de parcourir via une boucle les messages pour les vérifier un à un,
le nombre de message que je n'est pas lu ?
merci d'avance
Dernière modification par mastersystem60 (30-04-2013 20:21:01)
Hors ligne
Y a t'il un moyen de dire dans une requête sql sans avoir besoin de parcourir via une boucle les messages pour les vérifier un à un,
le nombre de message que je n'ai pas lu ?
Oui.
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Elle est terrible ta réponse, lol
Hors ligne
Bon, plus sérieusement, comme j'ignore la structure de tes tables, ça donnerait qqe chose comme ça
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
La structure pour la table "postit"
ID | TEXTE | DATE_DEPOT
La structure pour la table "postit_vu"
ID | ID_POSTIT | ID_LECTEUR
La liaison et effective entre POSTIT.ID et POSTIT_VU.ID_POSTIT
encore merci pour ton aide, je vais tester ta requête
Hors ligne
Un grand merci pour ton aide Maljuna Kris et bonne fin de journée à toi ++
Dernière modification par mastersystem60 (01-05-2013 09:57:16)
Hors ligne
En fait, je pense que la requête ne fait pas tout à fait ce qui tu attends.
Je crois qu'il faut d'abord filtrer postit_vu dans une sous-requête, c.a.d. seulement les posts visités par cet user, et c'est cette sous-requête qu'il faut mettre en jointure externe avec la table postit
J'espère que tu comprendras la subtilité, dans la première version les posts visités par d'autres users auraient aussi été comptablisés par IS NULL, et comme on ne faisait pas COUNT(DISTINCT p.ID) mais COUNT(*) tu aurais pu te retrouver avec un nombre de posts non-visités supérieur au nombre de lignes de la table postit.
Suis-je assez clair ?
Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy
Hors ligne
Merci Maljuna Kris j'ai compris, ta première requête est quand même bonne pour ma situation car j'ai un bouton "Vu" pour chaque message qui indique que l'utilisateur a bien pris conscience de l'information.
Ce bouton n'apparaît plus quand le message a été lu par l'utilisateur donc impossible d'ajouter une lecture de plus dans la table "postit_vu".
Je prends note de ton autre requête et te remercie une nouvelle fois pour ton aide
Hors ligne
Bonjour,
Je me permets d'apporter ici un complément d'information concernant le contexte d'application. Cette requête, bien que parfaitement fonctionnelle et juste, reste peu performante du principalement au fait que la colonne de filtrage porte sur une colonne non indexée qui oblige a faire un full scan sur la jointure au niveau du plan de la requête. Ceci est malheureusement dû aux limitations des possibilités qu'offre MySQL.
La solution pour accroître les performances en MySQL, serait de travailler au niveau de l'index censé être posé sur la colonne id_postit via une approche non relationnelle (malheureusement) via un NOT IN sur la clause WHERE.
Et encore les performances recherchées n'y seraient pas totalement garanties car fortement dépendantes du caractère discriminant de l'index.
Une manière plus propre (dans le sens ensembliste) de faire cela en SQL mais sur un autre SGBDR serait de passer par un EXCEPT ALL ou par une requête fenêtrée.
++
EDIT
Y a t'il un moyen de dire dans une requête sql sans avoir besoin de parcourir via une boucle les messages pour les vérifier un à un,
le nombre de message que je n'ai pas lu ?
Après relecture de l'énoncé, la requête présente une inexactitude et doit être corrigée ainsi
Dernière modification par Jc (03-05-2013 08:05:45)
POO PHP+Ajax en MVC avec PDO et Bases de données épaisses : What else?
Hors ligne