Tag: 子查询

活动记录插入

我试图让我的Rails应用程序在创建关系方面有一些高级function。 我正在运行MySQL作为后端。 下面的查询在PHPMyAdmin中运行得很好,但是在rails中尝试执行时,它什么都不做,没有错误,没有数据库写入…. 我使用活动记录来创建Campaign和Location之间的关系,然后下面的查询应该在campaign_metros表中构建: class CampaignLocation < ActiveRecord::Base belongs_to :campaign belongs_to :location after_touch :create_campaign_metro private def create_campaign_metro @sql_insert="INSERT INTO `campaign_metros` (`campaign_id`,`metro_id`, `created_at`,`updated_at`) SELECT f.`campaign_id`, f.`city_id`, NOW(), NOW() FROM (SELECT d.`campaign_id`, d.`city_id` FROM (SELECT c.`campaign_id`, c.`city_id` FROM (SELECT distinct a.`campaign_id`, b.`city_id` FROM `campaign_locations` a INNER JOIN `locations` b ON a.`location_id` = b.`id`) c) d LEFT JOIN […]

Rails Activerecord Relation:使用子查询作为SQL select语句的表

有人可以帮我弄清楚如何使用Rails编写以下SQL(我使用的是Rails 4)Activerecord方法? 我知道你可以用find_by_sql做到这一点,但我想保留活动记录关系。 这是我正在尝试创建的postGreSQL数据库的sql: SELECT * FROM (SELECT DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.id, table_b.time FROM table_1 LEFT OUTER JOIN table_b ON table_a.id = table_b.id ORDER BY table_a.id, table_b.time asc) AS subquery ORDER BY alias_a asc 对于我的子查询,我有以下内容(生成上面子查询的sql): @subquery = table_a.select(“DISTINCT ON(table_a.id) table_a.name as alias_a, table_b.time”) @subquery = @subquery.joins(“LEFT OUTER JOIN table_b ON table_a.id = table_b.id”) […]

ProtocolViolation:ERROR:绑定消息提供0个参数,但是准备好的语句“”需要1

我正在尝试根据最先留下最新评论的患者的顺序创建一份留下评论的独特患者列表。 这是我创建列表的Ruby .erb代码: @comment_list.order(“created_at desc”).each_with_index do |comment, index| @comment_list在控制器中定义为: @comments = current_clinician.comments.select(‘ON (patient_id) *’).uniq @comments = @comments.order(“patient_id, created_at DESC”) @comment_list = Comment.select(‘*’).from(“(#{@comments.to_sql}) sub”) 我收到一条ActiveRecord :: StatementInvalid消息: PG :: ProtocolViolation:错误:绑定消息提供0个参数,但是准备好的语句“”需要1:SELECT * FROM(SELECT DISTINCT ON(patient_id)* FROM“comments”WHERE“comments”。“clinician_id”= $ 1 ORDER BY patient_id, created_at DESC)sub ORDER BY created_at desc 我试着按照24619117的答案,我的输出是这个和答案顶部29660396的组合。 $ rails -v Rails 4.1.8 $ ruby -v ruby […]

通过OR或AND连接(粘合)条件(Arel,Rails3)

我有几个复杂的查询(使用子查询等…)并希望将它们与OR或AND语句粘合在一起。 例如: where1=table.where(…) where2=table.where(…) 我想要的东西 where3=where1.or where2 下一个示例对我不起作用: users.where(users[:name].eq(‘bob’).or(users[:age].lt(25))) 因为我有几个where(..)查询,我想连接它们 。 换一种说法 我有3个方法:首先返回第一个,第二个,第三个 – 或者连接。 我必须能够在我的应用程序中使用所有3种方法并保存DRY代码

Rails选择子查询(如果可能的话,没有finder_sql)

我有一个名为Object的模型(这并不重要) 它有一个默认价格(列称为“价格”)。 然后有一个Schedule对象允许覆盖特定日期的价格。 我希望能够在SQL查询期间确定MINIMUM价格(根据定义,默认值和“当前”价格之间的最小值),以便能够按计算的最低价格进行排序 我想让我的搜索查询尽可能高效,我想知道我是否可以这样做: Object.select(“id AS p_id, id, (SELECT MIN(`schedules`.`price`) FROM `schedules` WHERE `schedules`.`object_id` = p_id`) AS objects.min_price”).limit(5) 但是,它会生成一个奇怪的SQL,如下所示: SELECT `objects`.`id` AS t0_r0, `objects`.`title` AS t0_r1, `objects`.`created_at` AS t0_r2, `objects`.`updated_at` AS t0_r3, `objects`.`preferences` AS t0_r4 …….. (a lot of columns here) … ` WHERE `objects`.`id` IN (1, 2, 3, 4 ….) 所以,你可以看到它不起作用。 首先 – […]