2010-12-27 6 views
2

Was möchte ich erreichen möchte, könnte sein (eine ineffiziente Art und Weise), wie dies geschehen:Gibt es eine einfache Möglichkeit, die Datensatznummer N in einer Abfrage zu erhalten?

records = SomeModel.where(:some_field => "some value").all 
required_record = records[n] 

... wobei n die gegebene Position des Datensatzes in der scoped ist (durch "where") Ergebnisse.

Es ist offensichtlich ineffizient für große Tische, offensichtlich. Gibt es einen Weg, dies zu erreichen, ohne alle Aufzeichnungen zu holen?

Antwort

4

Verwenden Sie eine Kombination aus offset und limit, um nur die gewünschte Zeile abzurufen. Um zum Beispiel nur das fünfte Ergebnis zu erhalten:

SomeModel.where(:some_field => "some value").offset(5).limit(1) 
0

Äh, ich bin mir nicht sicher, ob ich Ihre Frage verstehe ... Datenbanken sind im Allgemeinen egal, wie viele Reihen Sie bestellen, also bestellen Sie nach dem Feld? Wenn ja, können Sie etwas wie die Funktion rank() in PostgreSQL (http://www.postgresql.org/docs/current/static/tutorial-window.html) verwenden.

Verwandte Themen