Как мне найти () все записи, уникальные в определенных полях?

StackOverflow https://stackoverflow.com/questions/651181

Вопрос

У меня есть список объектов 'request', каждый из которых обладает довольно нормальными качествами activerecord.Таблица запросов связана с таблицей games таблицей объединения 'games_requests', так что запрос содержит массив request.games.

Вопрос в том, есть ли способ выполнить поиск по последним n уникальным запросам, где уникальность определяется столбцом games и парой других, но специально игнорируются другие столбцы (например, имя запрашивающего пользователя?)

Я видел синтаксис типа 'find (:all, :limit=>5, :include=>[:games,:stage])', но это возвращало дубликаты.

Спасибо...

Редактировать:Спасибо хаосу за отличный отклик.Вы подвели меня очень близко, но мне все еще нужно, чтобы возвраты были действительными объектами запроса:первые 5 записей, которые отличаются в запрошенных строках.Я мог бы просто использовать поиск в том виде, в каком вы его создали, а затем выполнить второй поиск для первой строки в таблице, которая соответствует каждому из наборов, возвращенных первым поиском.

Редактировать:

Games.find(
    :all, :limit => 5,
    :include => [:games, :requests],
    :group => 'games, whatever, whatever_else'
)

...выдает ошибку SQL:

Mysql::Error: Unknown column 'games' in 'group statement': SELECT * FROM `games`  GROUP BY games

Я внес несколько изменений в то, что, по моему мнению, было правильным для моего проекта;получение списка запросов вместо игр и т. Д:

Request.find(
    :all, :order=>"id DESC", :limit=>5,
    :include=>[:games],   #including requests here generates an sql error
    :group=>'games, etc'  #mysql error:  games isn't an attribute of requests
    :conditions=>'etc'
)

Я думаю, мне придется использовать здесь опцию :присоединиться=>.

Это было полезно?

Решение

Games.find(
    :all, :limit => 5,
    :include => [:games, :requests],
    :group => 'games, whatever, whatever_else'
)

Другие советы

Попробуйте Rails uniq_by.Он также работает с ассоциацией и возвращает массив.

@document = Model.uniq_by(&:field)

Еще Деталь

Я думаю, вы сможете сделать это, используя find_by_sql и GROUP BY:

Games.find_by_sql("SELECT * FROM games GROUP BY user_id")
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top