Tag: sql

更好的SQL – :group vs.:select =>’DISTINCT’

让我们假设三个模型,标准连接: class Mailbox :addresses end class Address < ActiveRecord::Base belongs_to :mailbox belongs_to :domain end class Domain :addresses end 现在很明显,如果对于任何给定的邮箱,您想知道它在哪个域中有地址,您有两种可能的方法: m = Mailbox.first # either: SELECT DISTINCT domains.id, domains.name FROM “domains” INNER JOIN # “addresses” ON “domains”.id = “addresses”.domain_id WHERE # ((“addresses”.mailbox_id = 1)) m.domains.all(:select => ‘DISTINCT domains.id, domains.name’) # or: SELECT domains.id, domains.name FROM “domains” […]

Rails 3查询:使用’select’和’order’时出错

我试图回答这个问题 ,我得到了这个问题。 我有一个具有id , email和first_name列的用户模型。 因此,在单个查询中,我想选择具有不同first_name用户,通过email对其进行排序并获取其ID 。 我怎样才能做到这一点? 什么行不通: User.select(:first_name).uniq.pluck(:id) 因为它触发了这个SQL SELECT DISTINCT “users”.”id” FROM “users” 。 这是从用户中选择不同的id。 但是我们想要选择不同的first_name User.order(“email DESC”).pluck(:id).uniq SQL生成: SELECT “users”.”id” FROM “users” ORDER BY email DESC 。 这不起作用,因为生成的sql不检查first_name的唯一性。

是否可以使用`ORDER BY FIELD`语句对多列进行排序?

我正在使用Ruby on Rails 3.2.2,我想知道是否可以通过使用ORDER BY FIELD语句来订购多个列/字段(例如,在Model.order(“orders_count, created_at, name, …”)但是对于ORDER BY FIELD )。 如果是这样,我怎么能“按ORDER BY FIELDS ”? PS :如前面的答案中所述 ,为了订购与一栏相关的记录,我使用的是Model.order(“field(status, ‘blocked’, ‘unpublished’, ‘published’)”)语句。

Find_by_sql作为Rails范围

来自Sitepoint的r937非常友好,可以帮助我找出从数据库返回正确结果所需的查询。 我需要的是能够将此查询用作范围,并能够将其他范围链接到此范围。 查询是: SELECT coasters.* FROM ( SELECT order_ridden, MAX(version) AS max_version FROM coasters GROUP BY order_ridden ) AS m INNER JOIN coasters ON coasters.order_ridden = m.order_ridden AND COALESCE(coasters.version,0) = COALESCE(m.max_version,0) 我尝试制作这样的范围: scope :uniques, lambda { find_by_sql(‘SELECT coasters.* FROM ( SELECT order_ridden, MAX(version) AS max_version FROM coasters GROUP BY order_ridden ) AS m INNER JOIN […]

Postgres查询包含内容的JSON数组

Postgres有这个JSON数据类型,我想知道如何在JSON数组中查询数据? 我正在使用Postgres 9.3.1 我已插入到PUBLISHER表中,其中包含以下两个字段的名称:string和data:json INSERT INTO PUBLISHER (name, data) VALUES (‘PUB1’, [{“code”:”PA1″,”author”:”James”,”type”:”Novel”},{“code”:”PA2″,”author”:”John”,”type”:”Science”}] INSERT INTO PUBLISHER (name, data) VALUES (‘PUB2’, [{“code”:”PA1″,”author”:”Dickens”,”type”:”Novel”},{“code”:”PA2″,”author”:”Tom”,”type”:”Comic”}] 我想查询并列出“Novel”类型的作者。 在这种情况下,应该是输出的“詹姆斯”和“汤姆”。 这种查询的东西: select name, authorfromdata from publisher where data->type is “Novel”

将SQL查询转换为ActiveRecord Relation

如何将以下SQL查询转换为ActiveRecord关系,以便我可以使用范围扩展它? WITH joined_table AS ( SELECT workout_sets.weight AS weight, workouts.user_id AS user_id, workouts.id AS workout_id, workout_sets.id AS workout_set_id, workout_exercises.exercise_id AS exercise_id FROM workouts INNER JOIN workout_exercises ON workout_exercises.workout_id = workouts.id INNER JOIN workout_sets ON workout_sets.workout_exercise_id = workout_exercises.id ORDER BY workout_sets.weight DESC ), sub_query AS ( SELECT p.user_id, MAX(weight) as weight FROM joined_table p GROUP BY […]

Rails中的高级SQL

我有2个型号 class User < AR has_many :friends end class Friend < AR # has a name column end 我需要找到所有与’Joe’和’Jack’都是朋友的用户 知道我怎么能在铁轨上做到这一点?

根据多个列删除重复记录

在我们的系统中,我们从外部数据库运行每小时导入。 由于导入脚本中的错误,现在存在一些重复记录。 如果任何记录具有相同的副本,则视为副本:legacy_id和:company 。 我可以运行哪些代码来查找和删除这些重复项? 我正在玩这个: Product.select(:legacy_id,:company).group(:legacy_id,:company).having(“count(*) > 1”) 它似乎返回了一些副本,但我不确定如何从那里删除? 有任何想法吗?

SQLite到Postgres(Heroku)GROUP BY

以下SQLite代码组按conversation_id分组: @messages=Message.where(“messages.sender_id = (?) OR messages.recipient_id = (?)” , current_user.id, current_user.id).group(“messages.conversation_id”) 在转移到Heroku时,Postgres无法识别此代码。 查看日志,我被告知要将所有Message列添加到GROUP BY – 让我使用这个function代码: @messages=Message.where(“messages.sender_id = (?) OR messages.recipient_id = (?)” , current_user.id, current_user.id).group(“messages.conversation_id , messages.updated_at, messages.id, messages.sender_id , messages.recipient_id, messages.sender_deleted , messages.recipient_deleted, messages.body, messages.read_at , messages.ancestry, messages.ancestry_depth, messages.created_at”) 只有此代码才能正确地按conversation_id分组。 它只输出符合WHERE条件的所有消息。 有任何想法吗?

Rails 3中单个记录的多个外键?

我正在开发一个应用程序来管理注册课程的学生。 该应用程序将拥有可以登录和操作学生的用户。 用户还可以对学生发表评论。 因此,我们的三个主要课程是学生,用户和评论。 问题是我需要将个别评论与其他两个模型相关联:用户和学生。 所以我开始使用这样的基本代码…… class Student < ActiveRecord::Base has_many :comments end class User < ActiveRecord::Base has_many :comments end class Comment < ActiveRecord::Base belongs_to :student belongs_to :user attr_accessible :comment end 因此,在注释表中,单个记录将包含以下字段: id comment student_id user_id created_at updated_at 这提出了几个问题。 首先,用于创建关联对象的漂亮Rails语法分解。 如果我想发表新评论,我必须在外键之间进行选择。 所以… User.comments.create(attributes={}) 要么 Student.comments.create(attributes={}) 另一个选择是任意选择一个外键,并手动将其添加到attrs哈希。 所以… User.comments.create(:comment => “Lorem ipsum”, :student_id => 1) 这个选项的问题是我必须在我的评论模型中列出attr_accessible下的student_id。 […]