2015-07-12 80 views
0

我有两个疑问:如何加入这些查询?

SELECT * FROM `kamcms_forum_post` 
WHERE date=(SELECT max(date) 
FROM `kamcms_forum_post` 
WHERE `forum_topic_id` = [THERE IS PLACE FOR `forum_topic_id` from second query]) 

SELECT *, count(*) as posts 
FROM `kamcms_forum_topic` as t 
LEFT OUTER JOIN `kamcms_forum_post` as p ON t.forum_topic_id = p.forum_topic_id 
GROUP BY t.forum_topic_id ORDER BY p.forum_post_id 

首先查询需要从主题最后发表,第二查询需要从一个主题和TOPIC_NAME的第一篇文章(从其他表),并计数从主题的所有职位。我怎样才能加入这些查询?

输入:

kamcms_forum_topic http://screenshooter.net/102363018/ynselub kamcms_forum_post http://screenshooter.net/102363018/ihdjpdf

输出:

标题FROM forum_topic, 第一篇文章USER_ID和最后日期和USER_ID从forum_post。

+3

输出需要更好的解释!不太确定你的期望输出到底是什么。 – Gosu

回答

0

第一个问题,您的第二个查询总是会返回至少1,以便您计算左连接的主题。这应该与我能理解你的请求相当接近。

SELECT t.title, p.user_id, p2.user_id, p2.date, count(p.forum_topic_id) as posts 
FROM kamcms_forum_topic as t 
LEFT OUTER JOIN kamcms_forum_post as p ON t.forum_topic_id = p.forum_topic_id 
LEFT OUTER JOIN kamcms_forum_post as p2 ON t.forum_topic_id = p2.forum_topic_id 
WHERE p.date=((SELECT MIN(date) 
    FROM kamcms_forum_post sp where sp.forum_post_id = p.forum_post_id) 
AND p2.date=((SELECT MAX(date) 
    FROM kamcms_forum_post sp where sp.forum_post_id = p2.forum_post_id) 
GROUP BY t.forum_topic_id ORDER BY p.forum_post_id 
+0

它不工作,监守: - 总是返回第一USER_ID例如用于: 我编辑USER_ID从1到2 forum_post_id = 2,它仍然返回: – Yas

+0

* 它不工作,监守: - 总是返回第一个user_id,例如: 我编辑user_id从1到2 forum_post_id = 2,它仍然返回: user_id = 1和第二个user_id = 1(最后,何时应该返回2)。 - 返回第一个,不是最后一个日期,例如forum_topic_id = 1它返回 2015-02-23 00:00:00何时应该返回2015-02-24 00:00:00 – Yas

+0

@BartoszŚledź加了一点点。 – bowlturner

0

最终查询:

SELECT t.title, p.user_id, p2.user_id, p2.date, count(p3.forum_post_id) as posts 
FROM kamcms_forum_topic as t 
LEFT OUTER JOIN kamcms_forum_post as p ON t.forum_topic_id = p.forum_topic_id 
LEFT OUTER JOIN kamcms_forum_post as p2 ON t.forum_topic_id = p2.forum_topic_id 
LEFT OUTER JOIN kamcms_forum_post as p3 ON t.forum_topic_id = p3.forum_topic_id 
WHERE p.date=(SELECT MIN(date) 
    FROM kamcms_forum_post sp where sp.forum_topic_id = p.forum_topic_id) 
AND p2.date=(SELECT MAX(date) 
    FROM kamcms_forum_post sp where sp.forum_topic_id = p2.forum_topic_id) 
GROUP BY t.forum_topic_id ORDER BY p.forum_post_id 

感谢您的帮助