Come trovo () tutti i record univoci in determinati campi?
-
19-08-2019 - |
Domanda
Ho un elenco di oggetti 'request', ognuno dei quali ha qualità activerecord abbastanza normali. La tabella delle richieste è correlata alla tabella dei giochi con una tabella join, "games_requests", in modo che una richiesta abbia un array request.games.
La domanda è: c'è un modo per fare una ricerca per le ultime n richieste uniche, in cui l'unicità è definita dalla colonna giochi e da un paio di altre, ma ignora specificamente altre colonne (come il nome dell'utente richiedente?)
Ho visto una sintassi come 'find (: all,: limit = > 5,: include = > [: games,: stage])' ma che restituiva duplicati.
Grazie ...
EDIT: grazie al caos per un'ottima risposta. Mi hai avvicinato molto, ma ho ancora bisogno che i ritorni siano oggetti richiesta validi: i primi 5 record che sono distinti nelle righe richieste. Potrei semplicemente usare la ricerca mentre la costruisci e quindi fare una seconda ricerca per la prima riga nella tabella che corrisponde a ciascuno dei set restituiti dalla prima ricerca.
EDIT:
Games.find(
:all, :limit => 5,
:include => [:games, :requests],
:group => 'games, whatever, whatever_else'
)
... genera un errore SQL:
Mysql::Error: Unknown column 'games' in 'group statement': SELECT * FROM `games` GROUP BY games
Ho apportato alcune modifiche a ciò che ho ritenuto corretto per il mio progetto; ottenere un elenco di richieste anziché giochi, ecc.
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'
)
Sto pensando che dovrò usare: join = > opzione qui.
Soluzione
Games.find(
:all, :limit => 5,
:include => [:games, :requests],
:group => 'games, whatever, whatever_else'
)
Altri suggerimenti
Prova Rails uniq_by. Funziona anche con associazione e restituisce array.
@document = Model.uniq_by (& amp;: field)
Altro Dettaglio
Penso che sarai in grado di farlo usando find_by_sql e GROUP BY:
Games.find_by_sql("SELECT * FROM games GROUP BY user_id")