2011-04-06 1 views
2

Voici ma question:Avoir un problème tirant une valeur MAX() dans MySQL

SELECT thread_id, MAX(post_id) as post_id, subject, user_id, username, dateline 
FROM posts 
GROUP BY thread_id 
ORDER BY dateline DESC 
LIMIT 0,9; 

Je suis en train de produire les 10 derniers messages sur mon forum dans le format suivant:

<a href="link_to_latest_post_in_thread">Thread Subject</a> posted by 
<a href="link_to_user_profile">Username of LAST USER to post in thread</a> 

Tout fonctionne correctement avec la requête ci-dessus, sauf que le nom d'utilisateur et l'id_utilisateur retournés n'appartiennent pas toujours à la même ligne que MAX (post_id) - ils proviennent aléatoirement de n'importe quel post du thread. Si un thread a 5 messages par 5 utilisateurs différents, je veux que la sortie lise "SUBJECT posté par DERNIER UTILISATEUR POUR PUBLIER DANS LE SUJET" mais à la place MySQL sélectionne (apparemment) aléatoirement le nom d'utilisateur et la valeur user_id de l'une des 5 lignes qui sont étant groupé sous thread_id. Comment puis-je dire à MySQL "Prenez la ligne avec la valeur maximum de post_id pour chaque thread ID, et utilisez UNIQUEMENT les valeurs de cette ligne Ne renvoyez pas aléatoirement les valeurs des autres lignes qui sont groupées sous thread_id."

Merci beaucoup pour votre aide.

Chris

+0

Je pense que vous devez utiliser JOIN. –

Répondre

3
select thread_id, p2.post_id as post_id, subject, user_id, username, dateline 

from posts 

join (
    select MAX(post_id) as post_id 
    from posts 
    group by thread_id 
    order by dateline DESC 
    limit 10 
) as p2 ON p2.post_id = posts.post_id 

order by dateline DESC 
+0

Le groupe par thread_id extérieur est étranger, en supposant que post_id est unique – RichardTheKiwi

+0

ouais, quand j'ai relu la requête j'ai réalisé que :) Et probablement déplacer la limite à la requête interne rend les choses un peu plus rapides .. –

+1

A travaillé comme un charme, merci! – Chris

Questions connexes