2011-04-17 110 views
2
SELECT t.thread_id, t.subject, u.username, 
    COUNT(p.post_id) - 1 AS responses, 
    MAX(DATE_FORMAT(p.posted_on, '%e-%b-%y %l:%i %p')) AS last, 
    MIN(DATE_FORMAT(p.posted_on, '%e-%b-%y %l:%i %p')) AS first 
    FROM threads AS t 
    INNER JOIN posts AS p USING (thread_id) 
    INNER JOIN users AS u ON t.user_id = u.user_id 
    WHERE t.cat_id = 1 
    GROUP BY (p.thread_id) ORDER BY last DESC 

我以为我做了这个权利,但我的查询只返回一行,我有4行,其中t.cat_id = 1。任何想法?简单的MYSQL查询问题

编辑** 样本数据 http://i56.tinypic.com/f1e449.png

现在我只是想起来了一个结果:

1 THREAD1 USER1 8 17-Apr-11 6:22 AM 17-Apr-11 3:58 AM 

我期待得到的东西,如:

1 THREAD1 USER1 8 17-Apr-11 6:22 AM 17-Apr-11 3:58 AM 
2 THREAD2 USER1 8 17-Apr-11 6:22 AM 17-Apr-11 3:58 AM 
3 THREAD3 USER1 8 17-Apr-11 6:22 AM 17-Apr-11 3:58 AM 
+0

你能后的样本数据,预期与实际结果? – Oded 2011-04-17 07:30:02

+0

也许所有4行都有相同的p.thread_id,你可以通过它做一组 – 2011-04-17 07:30:26

+0

当然,给我一分钟。 – aph107 2011-04-17 07:30:43

回答

1

有机会,在其中一个连接表中没有对应的行:

INNER JOIN posts AS p USING (thread_id) 
INNER JOIN users AS u ON t.user_id = u.user_id 

另一种可能性(与第一个不相互排斥)是分组子句折叠行。

+0

谢谢,我昨晚不明白它,但搞乱了我发现我们需要的是'LEFT JOIN' – aph107 2011-04-17 20:39:50

0

你已经选择了t.thread_id,但你是由p.thread_id分组。

更改group by

GROUP BY (t.thread_id) ORDER BY last DESC 
     ^