我在RoR上编写服务器端,它使用postgresql。
今天我遇到了一个功能,我需要识别表中行的当前偏移量。客户端向我发送一个唯一标识符,我需要返回此项目的当前偏移量。
所以,我有表'items'和模型'Item'。
项目具有唯一字段。我们称之为“关键”。
例如,我的'items'表中包含以下数据:
id | key
----------
0 | abb
1 | acc
3 | cbb
5 | aqq
如果客户向我发送密钥'aqq'。我应该输出4。 如果客户发给我'acc'。我应该输出2。
如果有办法在不加载表中的所有数据并在循环中进行处理的情况下执行此操作?
提前致谢!
答案 0 :(得分: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;
如果你有重复的密钥,你可能想要通过id订购cte SELECT来确定性地获得id最高或最低的密钥。
答案 1 :(得分:2)
如果您想通过ActiveRecord,那么类似:
Item.where("id <= ?", Item.find_by_key("aqq").id).count