mysql - Rails 中的嵌套 SQL 查询

标签 mysql sql ruby-on-rails ruby ruby-on-rails-3

我有以下查询

@initial_matches = Listing.find_by_sql(["SELECT * FROM listings WHERE industry = ?", current_user.industry])

有没有办法可以使用each do 对上述查询中的选择运行另一个SQL 查询?我想运行 geokit 计算来消除超出指定距离的某些列表...

最佳答案

你的问题有点令人困惑。你想使用each..do (ruby) 来进行过滤吗?或者你想使用sql查询。以下是如何让 ruby​​ 进程进行过滤

refined list = @initial_matches.map { |listing|
   listing.out_of_bounds? ? nil : listing
}.comact 

如果你想使用 sql,你可以简单地将额外的 sql(可能是子选择)添加到你的 Listing.find_by_sql 中。打电话。

如果您想按照评论中的说明进行操作。

WHERE location1.distance_from(location2, :units=>:miles)

您正在混合 ruby​​ ( location1.distance_from(location2, :units=>:miles) ) 和 sql ( WHERE X > 50 )。这很困难,但并非不可能。

但是,如果您已经必须在 ruby​​ 中进行距离计算,为什么不在那里也进行过滤呢。因此,本着我第一个例子的精神。

listing2 = some_location_to_filter_by
@refined_list = @initial_matches.map { |listing|
   listing.distance_from(listing2) > 50 ? nil : listing
}.compact 

这将迭代所有列表,仅保留距离某个预定列表超过 50 的列表。

编辑:如果此逻辑在 Controller 中完成,您需要分配给 @refined_list而不是refined_list因为 View 只能访问 Controller 实例变量(而不是本地变量)。

关于mysql - Rails 中的嵌套 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6837864/

相关文章:

javascript - 更改下拉菜单的值时更改文本输入值

sql - 使用 liquibase 更新表中的一行

ruby-on-rails - 如何在谷歌计算引擎上转储 postgres

css - 如何访问 custom.css.erb 中的 rails 实例变量(@theme)?

php - 简单的 order by 子句不适用于内部连接

MYSQL 存储过程if else dayname

MySQL连接2个具有不同列的表

MySQL SUM、JOIN 和 GROUP BY...正确的结构

mysql - MySQL 的 System.Data.SqlClient 命名空间?

ruby-on-rails - 重构以下代码行