2012-03-09 46 views
0

我在爲應用程序構建一個論壇,並且我試圖在討論中獲取最新的海報。我正在使用的數據庫是Oracle。在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 discussions.created_at, 
     discussions.title, 
     users.username, 
     count(threads.id) AS "replies", 
     count(distinct discussion_views.discussion_id) AS "views" 
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 
group by discussions.created_at, discussions.title, users.username 
order by discussions.created_at desc 

我需要的是讓誰張貼在一個線程和日期的最後一個用戶。我應該製作一個內插件,一個連接還是應該製作另一個插件。我也希望我的查詢是高性能的,因爲我的論壇需要處理大量的流量。

+0

您已要求誰張貼在一個線程中的最後一個用戶的日期,但你的線程表上沒有它的日期。此外,你的「視圖」計數將始終返回1(在有任何視圖的地方),因爲對於給定的討論,只會有一個獨特的discussion_id - 'discussion_views'是否有其獨特的'id'列? – 2012-03-09 12:06:21

回答

1

嘗試:

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.time) 
      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 
+0

它不工作...這裏是錯誤'ORA-00923:FROM關鍵字找不到預期的地方' – Mythriel 2012-03-09 12:28:29

+0

@Mythriel:由於'「views」後缺少一個逗號,現在已更正。我注意到雖然你已經更新了表格結構,但是你沒有在'discussion_views'中添加一個唯一的ID,所以我修改了查詢來使用'time'。嘗試更新的查詢。 – 2012-03-09 12:51:02

+0

可以解釋有點查詢..我得到奇怪的數據爲最新的職位,我的意思是我什麼也沒有得到什麼我有數據爲它 – Mythriel 2012-03-09 12:59:08