probleme sur un distinct MYSQL

Eléphant du PHP | 294 Messages

06 août 2008, 10:03

J'ai résolu mon problème je me suis mis aux sous requêtes et j'ai la solution:

Code : Tout sélectionner

SELECT Q.titre, Q.IDdiscussion,T.theme, Q.question, M.Mb_Pseudo AS pseudo FROM discussions AS Q, discussions_themes AS T, membres AS M,( SELECT DISTINCTROW IDdiscussion AS IDQR, date_rec AS RepDate FROM discussion_rep AS R ORDER BY RepDate DESC ) AS P WHERE Q.IDdiscussion=IDQR AND T.IDtheme=Q.IDtheme AND M.Mb_ID=Q.ID_Mb GROUP BY Q.IDdiscussion ORDER BY P.RepDate DESC LIMIT 3


Bonjour, j'ai une requête assez complexe -pour moi - qui me donne pas le bon résultat:
il s'agit d'un forum, je veux afficher les 3 dernières questions pour lesquelles une réponse a été postée:
j'ai ce code que je commente plus bas :

Code : Tout sélectionner

SELECT DISTINCT discussion_rep.IDdiscussion, discussions.titre, discussions.question, discussions.IDtheme, discussions_themes.theme, membres.Mb_Pseudo AS pseudo FROM discussion_rep, discussions, discussions_themes, membres WHERE discussion_rep.online='Y' AND discussions.IDdiscussion=discussion_rep.IDdiscussion AND discussions_themes.IDtheme = discussions.IDtheme AND membres.Mb_ID =discussions.ID_Mb ORDER BY discussion_rep.date_rec DESC LIMIT 3
il y a les tables:
discussions: c'est les questions
discussions_rep : c'est les reponses
discussions_themes : c'est les rubriques de discussion
membres : les inscrits - ici je recupère celui qui a posté la question

la logique : je récupère les derniers reponses, a partir de l'IDdiscussion de la table des reponses , je recupere les infos sur la question, et a partir de celle là la rubrique et puis le membre; je fais un distinct pour eviter les doublons - je ne veux afficher qu'une fois bien sûr la dernière question traitée;

Au resultat je n'affiche que les 3 dernières questions posées, par les 3 dernières questions pour lesquelles une réponse a ete postée. Mon ORDER en plus ne sert a rien, c'est dans mes jointures que ça coince ! elles prennent le pas sur les reponses de la table discussions_rep qui est celle qui doit tout "entrainer"

Code : Tout sélectionner

CREATE TABLE `discussion_rep` ( `IDdiscussion` INTEGER(11) UNSIGNED NOT NULL DEFAULT '0', `IDRep` INTEGER(11) UNSIGNED NOT NULL AUTO_INCREMENT, `texte` TEXT COLLATE utf8_general_ci, `Mb_ID` MEDIUMINT(9) DEFAULT NULL, `date_rec` TIMESTAMP(0) NOT NULL DEFAULT CURRENT_TIMESTAMP, `photo` VARCHAR(60) COLLATE utf8_general_ci DEFAULT NULL, `online` ENUM('Y','N') DEFAULT NULL, PRIMARY KEY (`IDRep`), FULLTEXT KEY `texte` (`texte`) )ENGINE=MyISAM AUTO_INCREMENT=73 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci'; CREATE TABLE `discussions` ( `IDdiscussion` MEDIUMINT(9) NOT NULL AUTO_INCREMENT, `IDtheme` TINYINT(2) DEFAULT NULL, `titre` VARCHAR(120) COLLATE utf8_general_ci NOT NULL DEFAULT '', `question` TEXT COLLATE utf8_general_ci NOT NULL, `ID_Mb` SMALLINT(6) NOT NULL DEFAULT '0', `date_in` TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP, `online` ENUM('Y','N') DEFAULT NULL, PRIMARY KEY (`IDdiscussion`), FULLTEXT KEY `question` (`question`) CREATE TABLE `discussions_themes` ( `IDtheme` TINYINT(2) NOT NULL AUTO_INCREMENT, `theme` VARCHAR(40) COLLATE utf8_general_ci DEFAULT NULL, `img_theme` VARCHAR(25) COLLATE utf8_general_ci DEFAULT NULL, `online` ENUM('Y','N') DEFAULT NULL, PRIMARY KEY (`IDtheme`) )ENGINE=InnoDB AUTO_INCREMENT=9 CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT='InnoDB free: 11264 kB';
Merci d'avance

Eléphanteau du PHP | 18 Messages

06 août 2008, 17:18

enleve distinct et order by et met group by

Eléphant du PHP | 294 Messages

06 août 2008, 21:25

merci