Поиск последней и уникальной записи в таблице «многие ко многим» в рельсах 3 - PullRequest
1 голос
/ 21 января 2011

Я пробовал Rails уже месяц.Я действительно наслаждаюсь этим!Но у меня возникла проблема, надеюсь, кто-то может мне помочь!

Моя база данных проста с 3 таблицами:
User (id, Name)
User_status_code (id, status_code_id, user_id, timestamps)
status_code (id, description) (статус: 1 = Создан, 2 = Активен, 3 = Неактивен, 4 = Удален)

Таблица User имеет отношение многие-ко-многим к status_code через user_status_code.

Как найти всех пользователей, у которых status_id = 3 (неактивно), но не status_id = 4 (удалено)?
и
Как получить отдельный список пользователей с последним идентификатором status_id, основанным на значении «create_at» в таблице user_status_code?

Пример: в user_status_code у меня 7 записей с 3 пользователями:

Id, user_id, status_code_id, созданный_at
1, 1, 1, 15-12-2010
2, 1, 2, 16-12-2010
3, 2, 1, 15-12-2010
4, 3, 1, 17-12-2010
5, 3, 2, 20-12-2010
6, 3, 3, 21-12-2010
7,3, 4, 22-12-2010

Как я могу отобразить последний статус для всех пользователей?

Вот что я хочу:
2, 1, 2, 16-12-2010
3, 2, 1, 15-12-2010
7, 3, 4, 22-12-2010

(извините за мой английский) /Christian

1 Ответ

0 голосов
/ 21 января 2011

Вопрос 1

Я уверен, что есть более красивый способ сделать это с каким-то левым внешним объединением, но это похоже на работу с подзапросом:

SELECT DISTINCT user_id
FROM user_status_codes
WHERE status_code_id = 3 AND user_id NOT IN
  (SELECT DISTINCT user_id
   FROM user_status_codes
   WHERE status_code_id = 4)

Вопрос 2

Это пример группового агрегата .

Опять же, возможно, есть более чистый и быстрый метод, но попробуйте это:

SELECT user_id, status_code_id, created_at
FROM user_status_codes t1
WHERE created_at =
  (SELECT MAX(created_at)
   FROM user_status_codes t2
   WHERE t1.user_id = t2.user_id)

Это должно быть тривиальным вопросом, чтобы сопоставить оба этих запроса с их соответствующими объектами AR.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...