Dernier message d'un forum

Par Eckodrake, il y a 7 ans


Base de données MySQL

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éponses

Romano83, il y a 7 ans

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)
Eckodrake, il y a 7 ans

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.

Romano83, il y a 7 ans

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)
Eckodrake, il y a 7 ans

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.

Romano83, il y a 7 ans

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...