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
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';