2

我正在使用 postgresql 在 RoR 上编写服务器端。

今天我遇到了一个特性,我需要识别表中一行的当前偏移量。客户向我发送一个唯一标识符,我需要返回该项目的当前偏移量。

所以,我有表“项目”和模型“项目”。

项目有一个独特的领域。让我们称之为“钥匙”。

例如,我的“项目”表有以下数据:

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

1  |  acc

3  |  cbb

5  |  aqq

如果客户向我发送密钥“aqq”。我应该输出 4。如果客户给我发送“acc”。我应该输出2。

如果有一种方法可以做到这一点,而无需从表中加载所有数据并循环遍历它?

提前致谢!

4

2 回答 2

2

这是您可以在 PostgreSQL 中执行此操作的一种方法,我必须将映射到 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

如果您有重复的键,您可能需要按 id 排序 cte SELECT 以确定性地获取具有最高或最低 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 回答