2011-01-17 7 views
2

J'ai un système de messagerie qui doit être commandé correctement. Lorsqu'un post est créé, un ID de thread lui est automatiquement affecté (quel que soit le thread auquel il appartient).MySQL GROUP BY et ORDER BY question

Je suis GROUPEMENT actuellement les postes sous leur ID de fil comme celui-ci:

SELECT 
     * 
    FROM 
     `Posts` 
    INNER JOIN 
     `Profiles` 
    ON 
     `Profiles`.`ID` = `Posts`.`Sender` 
    GROUP BY  
     `Posts`.`ThreadID` 
    ORDER BY 
     `Posts`.`ID` DESC 

Ce que je veux arriver est la plus récente mise à jour FILET à afficher en premier dans la liste. Donc, si un message pour Thread C vient d'être créé, Thread C s'affichera en premier (avant Thread A ou Thread B). Je ne savais pas quoi mettre pour ORDER BY.

Est-ce que quelqu'un sait si c'est possible?

+0

Quelle est la définition de la table pour 'Posts'? –

+0

Quels sont les champs dans la table des messages? vous pouvez commander en postant la date, si elle est disponible. –

+1

Actuellement, vous ne sélectionnez qu'un post pour chaque thread. Etes-vous conscient de cela? –

Répondre

2
SELECT * 
FROM `Posts` INNER JOIN `Profiles` ON 
    `Profiles`.`ID` = `Posts`.`Sender` 
GROUP BY  
    `Posts`.`Thread` 
ORDER BY 
    MAX(`Posts`.`ID`) DESC 

Mise à jour: Si vous voulez obtenir tous les messages pour chaque fil et afficher les plus récents discussions sur le dessus:

SELECT p.*, pf.* 
FROM Posts p JOIN `Profiles` pf ON pf.ID = p.Sender 
    JOIN (
SELECT Thread, MAX(ID) MaxPost 
FROM Posts 
GROUP BY Thread) po ON p.Thread = po.Thread 
ORDER BY po.MaxPost DESC, p.ID DESC 
+0

Cela ne fonctionnera pas, le regroupement ne permet pas de différents utilisateurs (profils), vous obtiendrez un poste essentiellement aléatoire retourné dans chaque thread – DeveloperChris

+0

@developerchris Voir mes commentaires sur la question. –

+0

Le code mis à jour entraîne "Erreur mysql: colonne inconnue 'po.ThreadID' dans 'on clause'". Je veux que les discussions soient affichées, et je les veux ORDONNÉES par leur post le plus récent. Donc, disons que je soumets un nouveau message dans Thread C, Thread C sera alors ordonné en haut. – hohner