Ruby 查询具有已知列和行的特定单元格

Ruby 查询具有已知列和行的特定单元格,ruby,postgresql,Ruby,Postgresql,我正在使用Ruby(而不是Rails)和PostgeSQL,数小时来我一直在绞尽脑汁,试图弄清楚当您知道要交叉引用的列和行时,如何分配字段的值 我尝试了以下方法: 包含城市和链接距离的数据库,类似于: Cities city1 city2 city3 city4 city1 0 17 13 6 city2 17 0 7 15 city3 . . . city4 . . . 我尝试过使用以下代码: arra

我正在使用Ruby(而不是Rails)和PostgeSQL,数小时来我一直在绞尽脑汁,试图弄清楚当您知道要交叉引用的列和行时,如何分配字段的值

我尝试了以下方法:

包含城市和链接距离的数据库,类似于:

Cities city1 city2 city3 city4
city1    0    17   13     6
city2    17   0    7      15 
city3          . . . 
city4          . . .
我尝试过使用以下代码:

array.each { |city|   #array being the array containing the sorted cities
   from_city = city

   query { |row|
      #row is a hash containing each city as key and distance as val
      #first row: {"Cities"=>"city1", "city1"=>"0", "city2"=>"17",...
      #I have tried doing a row.each and grabbing the value of the specified city key, 
                             but that doesn't work..

   }
}

有没有更好的方法来做这件事?基本上,我需要知道的是,当我知道要使用哪两个城市并将其分配给变量
distance
时,如何提取距离值。我将更改您的数据库模式(SQL数据库并非真正设计为按列访问方式工作,每次添加城市时添加一个新列是非常痛苦的):

这样查找两个城市之间的距离就是:

conn.exec_params('SELECT distance from cities where origin = $1 and destination = $2', [city1, city2])
它将返回一行一列,这是两行之间的距离

或者,如果您的数据集很小且变化不大,那么将数据存储为文件并在启动时将其加载到内存中也没有什么问题。取决于您的用例


此外,如果您要进行大量几何计算,这可能是您想要的。

您使用什么连接到数据库?我强烈建议你看看宝石。它非常强大和灵活。而且,为了帮助您理解术语,数据库有行和字段,而不是单元格。到目前为止,这对我来说非常有效,但我只是被困在这个问题上。对ruby和数据库来说仍然是新手/假设您知道
to_city
,那么解决方案就像
行[to_city]
一样简单。
conn.exec_params('SELECT distance from cities where origin = $1 and destination = $2', [city1, city2])