Soucis sur une requête sql

WRInaute passionné
Bonjour,

J'ai un petit soucis sur sur une requête sql que je ne parviens pas à formuler correctement :( .
Soit la table "COMMENTAIRES" suivante :
66884347.png

J'ai besoin de récupérer distinctement les emails et pseudo dont le champ id_page=80, dont la validation=1, dont le champ suivre_sujet=oui tout en sélectionnant uniquement le dernier poste de chacun.

En gros, j'ai besoin de savoir si le dernier commentaire posté par chaque individu dont le champ id_page=80 contient le champ "suivre_sujet" à "oui" pour envoyer un mail automatique.

Dans cet exemple, je sais que "steutch" (id=211) ne suit pas le sujet puisque "id_page" est différent de "80", je n'ai donc pas besoin de son email tout comme "tryan" (id=217) dont le dernier poste indique le champ "suivre_sujet" à vide. Par contre, "Laure" souhaite suivre le sujet.

J'ai testé plein de requêtes différentes et celle qui s'en approche le plus est celle-ci :
Code:
SELECT MAX(id),MIN(suivre_sujet),email,pseudo FROM `COMMENTAIRES` WHERE id_page='80' AND validation='1' GROUP BY email

En faisant ça, la requête me sort tout les derniers commentaires pour chaque email distinct. Le truc et si la requête n'est pas trop nase, c'est que je ne parviens pas à garder seulement ceux dont le champ "suivre_sujet" correspond à "oui".

Un petit coup de neurones serait bienvenue .

Merci
 
WRInaute passionné
ça serait trop simple ^^...ce n'est pas ça. En ajoutant suivre_sujet = 'oui', il me sort par exemple l'id=214 qui est à "oui" alors que c'est la valeur du champ suivre_sujet de l'id 217 que je veux puisque c'est le dernier commentaire de cette personne correspondant à id_page=80.
 
WRInaute accro
J'aurais tendance à dire que si on n'arrive pas à faire la requête, il faut changer la structure des données ^^ :D
 
WRInaute occasionnel
Tu as essayé d'enlever la partie : MIN(suivre_sujet) du select et de rajouter AND suivre_sujet = 'oui' dans le where ?

Pour moi c'est bizare de lui demander une valeur max et min dans un même select en fait.
 
WRInaute passionné
@Marie-Aude : Bhaa tu ne m'aide pas beaucoup sur ce coup là :D et je ne vois pas comment faire plus simple comme base.
@silef : ça semble fonctionner :mrgreen:, faut que je teste encore .

Merci
 
WRInaute accro
Bonsoir

Perso je passerais par une vue générique renvoyant les id les plus grands par pseudo et page, puis je ferais une jointure dessus.

Bref. Ça pourrait donner ça :
Code:
CREATE VIEW `vw_PREMIERCOMM` AS SELECT MAX(id), pseudo, id_page FROM `COMMENTAIRES` WHERE validation='1' AND suivre_sujet='oui' GROUP BY pseudo, id_page;

SELECT id, pseudo, email FROM `COMMENTAIRES` INNER JOIN `vw_PREMIERCOMM` ON `COMMENTAIRES`.id = `vw_PREMIERCOMM`.id WHERE `vw_PREMIERCOMM`.id_page=80;

En principe MySQL permet de faire des vues... Je sais pas j'ai jamais essayé, mais c'est dans la doc :mrgreen:
 
WRInaute passionné
Salut,

C'est de la requête extra terrestre ^^! Je vais tester par curiosité mais je pense resté sur ma dernière tentative qui est bien plus compréhensible pour moi et qui semble fonctionner.

Merci
 
WRInaute accro
select email,pseudo,suivre_sujet from table t1 where id = (select max(id) from table t2 where t2.email=t1.email) group by email,pseudo

Non?

Jacques.
 
Discussions similaires
Haut