2012-06-27 94 views
0

试图做一个论坛系统优化,它选择一个查询中的所有最后的海报,并将它们存储在一个数组中。事情是数据库返回非预期的结果MYSQL用GROUP BY和ORDER BY返回奇怪的结果

PHP版本5.3.13

MySQL版本63年1月5日

$getPosts = $dB->fetch(' 
    SELECT 
    post_id, post_poster_id, post_topic_id, post_time, 
    COUNT(post_id) as count 
    FROM forum_posts 
    WHERE post_topic_id IN (
    SELECT topic_id 
    FROM forum_topics 
    WHERE topic_forum_id = ' . $forum_id . ' 
) 
    GROUP BY post_topic_id 
    ORDER BY post_time DESC 
'); 
foreach($getPosts as $lastPoster) 
{ 
    $lastPosts[$lastPoster['post_topic_id']] = $lastPoster; 
} 
+6

你有什么期望和您能得到什么? – Oleksi

+0

请发布样本数据和期望的输出。 – RedFilter

+0

请详细说明。意想不到的结果是什么意思?分组将按'post_topic_id'将行分组 – ksg91

回答

0
SELECT 
    p.post_id, p.post_poster_id, p.post_topic_id, p.post_time, l.count 

FROM forum_posts AS p 

-- joining with list of latests in a derived table 
INNER JOIN 

-- getting latest time and count 
(SELECT p.post_topic_id, MAX(post_time) AS post_time, COUNT(post_id) AS count 
FROM forum_posts AS p 
-- filtering forum_id with join, join is usually preferrable than subquery 
INNER JOIN forum_topics AS t ON t.topic_id = p.post_topic_id AND t.topic_forum_id = '$forum_id' 
GROUP BY post_topic_id) 

AS l USING(post_topic_id, post_time) 

-- grouping to strip possible post_time-in-one-topic-duplicates 
GROUP BY p.post_topic_id 
+0

谢谢,完美工作 – user1486625