2010-12-20 101 views
0

我一直在研究这一整天,而且我认为我的大脑现在不能正常工作。将3个查询链接在一起

我有3个表中的所有 “链接” 在一起:
板表有:
- board_id
- board_name

主题表有:
- topic_id
- topic_board_link(链接到一个board_id)

帖子表有:
- post_time
- post_parent(链接到顶部ic)

本质上,我希望它显示董事会,所选董事会的最后一个主题,以及该主题中的最后一篇文章。到目前为止,与我的一半运转的大脑,我已经(不工作,因为max_topic没有在最后定义,它只返回1行):

SELECT 
    b.board_name, 
    MAX(t.topic_id) as max_topic, 
    MAX(p.post_id) as max_post 
FROM board_list b 
    INNER JOIN (topic_list t, post_list p) 
    ON t.topic_board_link=b.board_id AND p.post_id=max_topic 

有没有一种方法,我可以做这不需要大量的子查询?

回答

0

last_topic_id添加到boards表和last_post_idtopics表。

在这种情况下,您将有简单而快速的查询,将返回所有你想要的。

+0

我想过这个,但是主题和帖子往往会很快被删除,而且我有一种感觉,从长远来看,某些东西不可避免地会变得混乱起来。 – 2010-12-20 06:57:35

+0

@kevin:删除和维护此引用是** MUCH CHEAPER **任务,而不是使用子查询进行选择。您可以使用触发器自动维护它们。 – zerkms 2010-12-20 07:51:21

+0

呃,好吧。那么我会这样做。触发器究竟是什么意思? – 2010-12-20 07:57:14