我的Rails应用程序中有一对模型,我遇到了桥接困难。
这些是我正在使用的表格:
状态
+----+--------+------------+
| id | fips | name |
+----+--------+------------+
| 1 | 06 | California |
| 2 | 36 | New York |
| 3 | 48 | Texas |
| 4 | 12 | Florida |
| 5 | 17 | Illinois |
| … | … | … |
+----+--------+------------+
地方
+----+--------+
| id | place |
+----+--------+
| 1 | Fl |
| 2 | Calif. |
| 3 | Texas |
| … | … |
+----+--------+
并非所有地方都在州模型中表示,但我正在尝试执行查询,我可以将地点的place
值与所有州name
进行比较,找到最接近的匹配,以及返回相应的fips
。
因此,如果我的输入为Calif.
,我希望我的输出为06
我仍然是编写SQL查询的新手,所以如果有一种方法可以在我的Rails(4.1.5)应用程序中使用Ruby,那将是理想的。
我的另一个攻击计划是在“places”表中添加一个fips
列,并编写一些可以运行上述比较的内容,然后填充fips
,这样我的应用就不必了每次加载页面时运行此查询。但我非常喜欢初学者,听起来很有野心。
答案 0 :(得分:2)
这在SQL中不是一个简单的查询。您最好的选择之一是模糊字符串匹配例程,其中记录了here。
例如,soundex()
或levenshtein()
可能足以满足您的需求。这是一个例子:
select distinct on (p.place) p.place, s.name, s.fips, levenshtein(p.place, s.name) as dist
from places p cross join
states s
order by p.place, dist asc;