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

时间:2014-11-25 06:28:44

标签: ruby postgresql

我正在使用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时,我可以如何拉取距离值。

1 个答案:

答案 0 :(得分:0)

我会更改您的数据库架构(SQL数据库实际上并不是设计为按列访问工作,每次添加城市时添加新列都非常痛苦):

origin | destination | distance
city1  | city2       | 17
... More rows ...

这样可以查看两个城市之间的距离:

conn.exec_params('SELECT distance from cities where origin = $1 and destination = $2', [city1, city2])

将返回1行,其中1列是两列之间的距离。

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

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