Dernier message d'un forum

135670
,

Bonjour,

J'ai un soucis au niveau de ma requête pour afficher le dernier message posté.

Ce que je fais

Image

SELECT s.slug, u.pseudo, MAX(t.id) AS idTopic, t.idSubcategory AS topicSubcat, t.subject, MAX(m.datePub)
FROM ln_forum_message m
LEFT JOIN ln_users u ON u.id = m.idUser
LEFT JOIN ln_forum_topics t ON t.id = m.idTopic
LEFT JOIN ln_forum_subcategory s ON s.id = t.idSubcategory
GROUP BY topicSubcat

Ce que j'obtiens

J'arrive à récupérer la dernière date du message, l'ID du topic, l'ID de la sous-catégorie avec la fonction MAX() mais c'est le subject qui coince.
Dès que je fais un GROUP BY sur l'ID des catégories, il me donne le tout premier subject créé et non le dernier (hors la date et l'ID affichés sont bien ceux du dernier !). J'ai essayé aussi de faire un MAX() sur le subject, il ne change rien. Une idée de où ça coince que mon subject ne colle pas avec le reste de la ligne ?

5 Réponse

35558
,

Salut !
Et en faisant un truc du style :

SELECT s.slug, u.pseudo, MAX(t.id) AS idTopic, t.idSubcategory AS topicSubcat, t.subject, MAX(m.datePub)
FROM ln_forum_message m
LEFT JOIN ln_users u ON u.id = m.idUser
LEFT JOIN ln_forum_topics t ON t.id = m.idTopic
LEFT JOIN ln_forum_subcategory s ON s.id = t.idSubcategory
GROUP BY topicSubcat
ORDER BY MAX(t.id)
135670
,

Salut Romano83,

Je viens de tester, aucun changement. Impossible de sélectionner le dernier message de chaque sujet et de les grouper selon la catégorie sans que le sujet déconne.

35558
,

OK.
Et avec ceci ?

SELECT s.slug, u.pseudo, MAX(t.id) AS idTopic, t.idSubcategory AS topicSubcat, t.subject, MAX(m.datePub)
FROM ln_forum_message m
LEFT JOIN ln_users u ON u.id = m.idUser
LEFT JOIN ln_forum_topics t ON t.id = m.idTopic
LEFT JOIN ln_forum_subcategory s ON s.id = t.idSubcategory
GROUP BY topicSubcat, MAX(t.id)
135670
,

Marche pas.
Si j'exécute tel que tu m'as passé, il me met l'erreur : "Impossible de regrouper idTopic".
Il ne veut pas prendre MAX(t.id) dans le GROUP BY.
Si je remplace par idTopic, il m'affiche ceci :

image

Or, je n'ai besoin que de deux entrées. Il faudrait que j'arrive à regrouper les sujets Nouveau départ et Arrivée et n'afficher que Arrivée, vu que le message le plus récent provient de ce sujet-là (Nouveau départ et Arrivée provenant de la même catégorie => cf. topicSubcat). Or dès que je fais le groupement, il m'affiche Nouveau départ, même si les autres champs correspondent bien au dernier message.

35558
,

Dans ce cas là, je pense que si tu fais ça, ça devrait fonctionner

SELECT DISTINCT s.slug, u.pseudo, MAX(t.id) AS idTopic, t.idSubcategory AS topicSubcat, t.subject, MAX(m.datePub)
FROM ln_forum_message m
LEFT JOIN ln_users u ON u.id = m.idUser
LEFT JOIN ln_forum_topics t ON t.id = m.idTopic
LEFT JOIN ln_forum_subcategory s ON s.id = t.idSubcategory
GROUP BY topicSubcat, idTopic

Sans les données de base, difficile à dire...