2

Postgresql を使用する RoR でサーバー側を作成しています。

今日、テーブル内の行の現在のオフセットを特定するために必要な機能に直面しました。クライアントから一意の識別子が送られてきて、このアイテムの現在のオフセットを返す必要があります。

だから、私はテーブル「アイテム」とモデル「アイテム」を持っています。

アイテムには固有のフィールドがあります。それを「鍵」としましょう。

たとえば、私の「アイテム」テーブルには次のデータがあります。

id |  key
----------
0  |  abb

1  |  acc

3  |  cbb

5  |  aqq

クライアントがキー「aqq」を送ってきたら。4 を出力する必要があります。クライアントから「acc」が送信された場合。2を出力する必要があります。

テーブルからすべてのデータをロードしてループで処理せずにこれを行う方法がある場合は?

前もって感謝します!

4

2 に答える 2

2

これは PostgreSQL でできる 1 つの方法です。RoR へのマッピングは他の人に任せる必要があります :)

WITH cte AS ( SELECT id FROM Table1 WHERE key='acc' LIMIT 1 )
SELECT COUNT(Table1.id) 
FROM Table1 JOIN cte ON Table1.id <= cte.id;

でテストする SQLfiddle

重複するキーがある場合は、cte SELECT を id で並べ替えて、最も高い ID または最も低い ID を持つものを決定論的に取得することができます。

于 2013-05-20T10:47:23.873 に答える
2

ActiveRecord を介してそれが必要な場合は、次のようになります。

Item.where("id <= ?", Item.find_by_key("aqq").id).count
于 2013-05-20T10:50:09.420 に答える