Model.find([1,2,3,4,...]) in einem SELECT bündeln


#1

Hi,

ich übergebe meiner find Methode ein großes Array von IDs, deren
zugehörige Datensätze aus der DB geladen werden sollen. Die IDs sind
nicht zwingend zusammenhängend, weshalb eine Abfrage mit LIMIT oder
OFFSET ausscheidet.

Beispiel:
ids = [41,42,51,52,61,62]
MapCell.find(ids)

funktioniert! Schaut man sich die Logfiles an, dann sieht man:
MapCell Load (0.8ms) SELECT * FROM map_cells WHERE
(map_cells.id = 41)
MapCell Load (0.3ms) SELECT * FROM map_cells WHERE
(map_cells.id = 42)
MapCell Load (0.3ms) SELECT * FROM map_cells WHERE
(map_cells.id = 51)
MapCell Load (0.2ms) SELECT * FROM map_cells WHERE
(map_cells.id = 52)
MapCell Load (0.3ms) SELECT * FROM map_cells WHERE
(map_cells.id = 61)
MapCell Load (0.2ms) SELECT * FROM map_cells WHERE
(map_cells.id = 62)

Rails führt für jede ID einen eigenen SELECT aus. Da das Array mit den
IDs locker mal 100 IDs enthalten kann, möchte ich das performanter
durchführen. Ideal wäre eine einzelne SQL-Abfrage.

Ist sowas mit Rails einfach realisierbar?

Viele Grüße,
Devillo


#2

Hi,

Sicher dass du eine aktuelle Version von rails hast?
Funktioniert nämlich schon seit einiger Zeit.

ciao, tom

Am 27.01.2009 um 13:28 schrieb Ko Ko:

Rails führt für jede ID einen eigenen SELECT aus. Da das Array mit den
IDs locker mal 100 IDs enthalten kann, möchte ich das performanter
durchführen. Ideal wäre eine einzelne SQL-Abfrage.


Thomas R. “TomK32” Koll || http://tomk32.de || http://ananasblau.com
just a geek trying to change the world
Skype: TomK32 || Mail: removed_email_address@domain.invalid
http://flickr.com/people/tomk32


#3

Sicher dass du eine aktuelle Version von rails hast?
Funktioniert n�mlich schon seit einiger Zeit.

ruby script/about
About your application’s environment
Ruby version 1.8.6 (universal-darwin9.0)
RubyGems version 1.3.1
Rails version 2.2.2
Active Record version 2.2.2
Action Pack version 2.2.2
Active Resource version 2.2.2
Action Mailer version 2.2.2
Active Support version 2.2.2
Application root *****
Environment development
Database adapter mysql
Database schema version 8


#4

Ko Ko wrote:

Sicher dass du eine aktuelle Version von rails hast?
Funktioniert n�mlich schon seit einiger Zeit.

ruby script/about
About your application’s environment
Ruby version 1.8.6 (universal-darwin9.0)
RubyGems version 1.3.1
Rails version 2.2.2

Mein Fehler,
geht wirklich schon :slight_smile:

Thema erledigt!