Tag: sql

查找没有相关记录的所有记录

我有一个球队桌和一个球员桌,我想找到所有没有球员的球队。 玩家表通过team_id列关联。 我正在使用Ruby on Rails,所以我有一个Team和一个Player模型。

如何使用Postgresql创建简单的模糊搜索?

我的基于RoR的网站上的搜索function有点问题。 我有很多产品和一些CODE。 此代码可以是任何字符串,如“AB-123-lHdfj”。 现在我使用ILIKE运算符来查找产品: Product.where(“code ILIKE ?”, “%” + params[:search] + “%”) 它工作正常,但找不到像“AB123-lHdfj”或“AB123lHdfj”这样的代码的产品。 我该怎么办? 可能postgresql有一些字符串规范化function,还是其他一些方法来帮助我? 🙂

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 ….) 所以,你可以看到它不起作用。 首先 – […]

在Rails 3 / ActiveRecord中构建LIKE查询时,一种正确的方法来转义%%

我想将url字段与url前缀(可能包含百分号)匹配,例如.where(“url LIKE ?”, “#{some_url}%”) 。 什么是最多的Rails方式?

在SQL查询中转义单引号

我有一个表companies ,它有两列名为name和address 。 通过运行以下代码,新数据将插入到表中: my_name = “my company name” my_address = “ABC” query = “INSERT INTO companies (name,address) VALUES (‘#{my_name}’,’#{my_address}’);” ActiveRecord::Base.connection.execute(query); 如果我将my_name值从”my company name”更改为”John’s company” ,我将收到语法错误。 这是因为查询变为: “INSERT INTO companies (name,address) VALUES (‘John’s company’,’ABC’);” 而’John’s company’有一个引号。 鉴于我已经为查询字符串定义使用了双引号,我怎样才能摆脱关于我的值中单引号的错误?

Rails 4访问连接表属性

我有一个用于配方应用程序的has_many through连接表设置,其中Ingredient和Meal通过MealIngredient连接。 在MealIngredient ,我有meal_id , ingredient_id和amount 。 我的问题是:如何访问amount列? 在我的食谱视图中,我遍历了各种成分: @meal.ingredients.each do |i| 我可以访问成分的属性,但不能访问MealIngredient记录中的金额。 我尝试在查询中使用includes @meal.ingredients.includes(:meal_ingredients) ,但我不确定如何访问上述循环中的amount 。 当我使用i.inspect ,我根本没有看到对meal_ingredients表的任何引用。 有没有办法使用i.amount访问该循环中的变量? 预先感谢您的任何帮助!

在Rails + Postgres中按任意时间间隔计算记录的最佳方法

我的应用程序有一个带有时间戳事件的Events表。 我需要在每个最近的N时间间隔内报告事件的数量。 对于不同的报告,间隔可以是“每周”或“每天”或“每小时”或“每15分钟间隔”。 例如,用户可以显示他们每周,每天,每小时或每季度收到的订单数量。 1)我的偏好是动态地执行单个SQL查询(我正在使用Postgres)按任意时间间隔进行分组。 有没有办法做到这一点? 2)一种简单但丑陋的暴力方法是对按时间戳排序的开始/结束时间帧内的所有记录执行单个查询,然后使用方法手动按任意间隔构建计数。 3)另一种方法是为每个间隔向事件表添加单独的字段,并静态存储the_week the_day , the_hour和the_quarter_hour字段,这样我就可以在创建记录时(一次)取“命中”而不是每次我关于该领域的报告。 这里有什么最好的做法,因为我可以根据需要修改模型并预先存储间隔数据(尽管只需要将表宽增加一倍)?

Rails 4 – 通过连接表条件查找对象

我有两个模型, User和Team ,它是一个many-to-many的连接表,名为Member 。 它的设置如下: #Team: has_many :members, dependent: :destroy has_many :users, through: :members #User has_many :members has_many :teams, through: :members #Member belongs_to :user belongs_to :team 我希望用户能够访问彼此的个人资料页面( controller: :users, action: :show )。 在个人资料页面上,我只想列出两个用户都是其成员的团队(他们也可以是不同团队的成员)。 我真的是这个: #UsersController def show @user = User.find(params[:id]) @teams = @user.teams.joins(:members).where(:members => { :user_id => current_user.id }) end 这不起作用(在某些情况下不显示任何团队,并且其他人显示错误的团队,总失败!) 那么,做我想要的正确方法是什么? 仅列出两个用户所属的团队?

Rails ActiveRecord Eager Load需要很长时间

我正在使用热切加载来加入我的两个表 Model1.eager_load(:model2) Model1表有大约800行,并且有许多对其他表的引用。 每当调用该行时,加载显示信息的视图大约需要3分钟。 然后,我试着建立一个直接的Postgres连接并运行从急切加载生成的相同的SQL查询,并在50ms内完成。 为什么在ActiveRecord中花费的时间更长,无论如何我可以减少时间? 在控制台中,它会转到以下SQL查询(当然这是一个简化版本),并且在它继续并加载页面之前它会挂起大约3分钟。 SELECT model1.*, model2.* FROM model1 LEFT OUTER JOIN model2 ON model2 .foreign_key = model1.id

查找不存在连接的记录

我可以根据用户是否对其进行投票来限制所有questions 。 在模型中: scope :answered_by, lambda {|u| joins(:votes).where(“votes.user_id = ?”, u.id) } scope :unanswered_by, lambda {|u| joins(:votes).where(“votes.user_id != ?”, u.id) } 在控制器中,我这样称呼它们: @answered = Question.answered_by(current_user) @unanswered = Question.unanswered_by(current_user) unanswered_by范围不正确。 我基本上想找到没有投票的地方。 相反,它试图寻找是否存在与当前用户不相等的投票。 任何想法如何返回不存在连接的所有记录?