2012-03-09 3 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

あなたはスレッドに投稿最後のユーザーの日付を求めているが、あなたのスレッドのテーブルには、その日付を持っていません。また、あなたの "views"カウントは常に1になります(そこにはビューがあります)。なぜなら、特定のディスカッションのためにディスカッションが1つだけあるからです。つまり、 'discussion_views'には独自の' id'カラムがありますか? –

答えて

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 keyword expected expected found here 'です。 – Mythriel

+0

@Mythriel:ビュー" 'の後にカンマがないため、修正されました。私はあなたがテーブル構造を更新したにもかかわらず、あなたは 'discussion_views'に一意のIDを追加していないので、' time'を使うようにクエリを修正しました。更新されたクエリを試してください。 –

+0

私は少しのクエリをplsを説明することができます..私は最新の投稿のために奇妙なデータを取得することができます私はそれものためにデータを持っていることを何も得ていないことを意味します – Mythriel

関連する問題