2012-03-13 103 views
0

我正在建立一个使用Oracle作为我的rdbms的论坛,而且我有一个查询获取所有论坛帖子并显示一些数据的问题。我遇到的问题是获得最后的讨论海报。用我的查询,我只设法得到最后一张海报的ID,但我想从用户表中获得他的用户名。这是我有:oracle查询获取论坛的所有帖子

我有以下模式:

discussions 
    id 
    course_id 
    user_id 
    title 
    stub 
    created_at 

threads 
    id 
    discussion_id 
    user_id 
    created_at 
    updated_at 
    message 

discussion_views 
    discussion_id 
    user_id 
    time 

    users 
    id 
    username` 

我可以把这个查询:

select * from 
(select discussions.created_at, 
     discussions.title, 
     users.username as discussion_created_by, 
     count(distinct threads.id) over (partition by discussions.created_at, 
                 discussions.title, 
                 users.username) AS replies, 
     count(distinct discussion_views.discussion_id) 
      over (partition by discussions.created_at, 
           discussions.title, 
           users.username) AS "views", 
     threads.user_id AS latest_post_by, 
     threads.updated_at AS latest_post_at, 
     row_number() over (partition by discussions.created_at, 
             discussions.title, 
             users.username 
          order by threads.id desc) AS rn 
from discussions 
left join threads on discussions.id=threads.discussion_id 
left join discussion_views on discussions.id=discussion_views.discussion_id 
join users on users.id=discussions.user_id) sq 
where rn=1 
order by created_at desc 

我越来越latest_post_by作为ID,我想要显示的用户名

+0

你不能只替换'和'users.username threads.user_id AS latest_post_by' AS latest_post_by'? – Ollie 2012-03-13 09:12:47

+0

如果我替换它,users.username存储在进行左连接时设置的讨论帖子的值 – Mythriel 2012-03-13 09:29:25

回答

2

作为对您评论的回应,请在users表中添加另一个连接。

join users latest_poster ON (latest_poster.id=threads.user_id) 

然后更换:

threads.user_id AS latest_post_by 

有:

latest_poster.username AS latest_post_by 

这应该然后给你通过threads.user_id标识的用户的用户名。

希望它可以帮助...