запрос оракула для получения всех сообщений с форума

Я создаю форум, используя Oracle в качестве моей rdbms, и у меня возникают проблемы с 1 запросом, который извлекает все сообщения форума и отображает некоторые данные. Проблема, с которой я сталкиваюсь, заключается в том, чтобы получить последний постер для обсуждения. С моим запросом мне удалось получить только идентификатор последнего автора, но я хочу получить его имя пользователя из таблицы пользователей. Вот что у меня есть:

У меня есть следующая схема:

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

Я получаю last_post_by в качестве идентификатора, я хочу отобразить имя пользователя


person Mythriel    schedule 13.03.2012    source источник
comment
Не могли бы вы просто заменить threads.user_id AS latest_post_by на users.username AS latest_post_by?   -  person Ollie    schedule 13.03.2012
comment
если я заменю его, user.username сохранит значение плаката обсуждения, которое установлено при выполнении левого соединения   -  person Mythriel    schedule 13.03.2012


Ответы (1)


В ответ на ваш комментарий добавьте еще одно объединение в таблицу 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.

Надеюсь, поможет...

person Ollie    schedule 13.03.2012