【发布时间】:2013-06-09 01:39:51
【问题描述】:
这与我之前位于here 的问题类似。在 SQL(使用 ActiveRecord)中有什么方法可以使用 LIKE 运算符对关系进行排序吗?例如,我正在查询一个关系,其中一列是一个长字符串,通常包含许多逗号分隔值。我想通过将上述列的值与使用 LIKE 的较小字符串匹配的记录排序到前面来排序结果关系(例如,如果我的变量是“西班牙”,那么我想要一个值类似于“爱尔兰,西班牙、法国”将被置于关系的前列)。
我用MyModel.order("country_preferences LIKE ?", country) 之类的东西在活动记录中尝试了这个,但是得到了一个 SQL 错误。执行这种排序的正确方法是什么?
更新(摘自 cmets):
使用 PostgreSQL 9.1。当前的 SQL 错误:http://pastie.org/8037147。
country_preference = "Ireland, Spain, France" 的 5 条记录,country_preference = "Ireland, Germany, France" 的 5 条记录。给定一个特定的国家,想要返回一个关系,其中 country_preferences 字符串包含该国家的记录被排在前面。
【问题讨论】:
-
示例。示例输入、当前输出、所需输出。另外,给出你得到的 SQL 错误。
-
5 条记录 country_preference = "爱尔兰、西班牙、法国",5 条记录 country_preference = "爱尔兰、德国、法国"。给定一个特定的国家,想要返回一个关系,其中 country_preferences 字符串包含该国家的记录被排在前面。
-
当前 SQL 错误可以在这里找到:pastie.org/8037147
-
如果我理解正确,这就是你想要的 MyModel.where("country_preferences LIKE ?", "%#{country}%").order("country_preferences")
-
这不排除所有“country_preferences LIKE”、“%{country}”返回false的记录吗?我想返回所有记录,只是将匹配的记录排在前面。
标签: sql ruby-on-rails postgresql activerecord ruby-on-rails-3.2