Tag: sql

rails union hack,如何将两个不同的查询拉到一起

我有一个查询,它搜索同一个表中的两个单独的字段…寻找最有可能是特定城市的位置,但也可能是一个国家……即需要两个字段。 表看起来像: Country City Germany Aachen USA Amarillo USA Austin 结果: Keyword Sideinfo Aachen Germany USA Country Austin USA Germany Country 基本上我想知道是否有更简洁的方法来做这个,因为我必须使用两个单独的查询然后将它们添加在一起,排序等等(这很好): def self.ajax(search) countries = Location.find(:all, :select=> ‘country AS keyword, “Country” AS sideinfo’, :joins => :hotels, :conditions => [ ‘hotels.email IS NOT NULL AND country LIKE ?’, “#{search}%” ], :group => :country ) cities […]

如何处理数据库中的大量记录以供用户授权?

我正在使用Ruby on Rails 3.2.2和MySQL。 我想知道是否“建议”/“希望”存储在与类相关的数据库表中与其实例的每个“ 组合 ”的两个其他类相关的所有记录。 也就是说,我有User和Article模型。 为了存储所有用户文章授权对象,我想实现一个ArticleUserAuthorization模型,以便给定N个用户和M篇文章有N * M ArticleUserAuthorization记录。 这样,我可以声明并使用ActiveRecord::Associations如下: class Article ‘ArticleUserAuthorization’ has_many :users, :through => :user_authorizations end class User ‘ArticleUserAuthorization’ has_many :articles, :through => :article_authorizations end 但是,上面存储所有组合的方法将导致一个包含数十亿数十亿行的大型数据库表! 此外,理想情况下,我计划在创建User或Article对象时创建所有授权记录(也就是说,我计划一次创建所有先前提到的“ 组合 ”,或者更好地,以“延迟”批次创建。无论如何,这个过程会创建其他数十亿的数据库表行!!!)并在销毁时做出反之亦然(通过删除数十亿数据库表行!!!)。 此外,我计划在更新User或Article对象时立即读取和更新这些行。 所以,我的怀疑是: 这种方法“可取”/“可取”吗? 例如,可能会出现什么样的性能问题? 或者,管理/管理具有非常大的数据库表的数据库是一种糟糕的“方式”/“处方”? 我可能/可能/应该如何处理(也许,通过“重新思考”如何以更好的方式处理用户授权)? 注意 :我会使用这种方法,因为,为了在检索User或Article对象时只检索“授权对象”,我认为我需要“primefaces”用户授权规则(即每个用户和文章对象的一个​​用户授权记录)因为系统不是基于“admin”,“registered”等用户组。 因此,我认为ArticleUserAuthorization表的可用性避免了运行与用户授权相关的方法(注意:这些方法涉及一些可能会恶化性能的MySQL查询 – 请参阅我之前针对每个检索的“授权”方法实现的问题)对象通过“简单地”访问/加入ArticleUserAuthorization表,以便仅检索“用户授权”对象。

如何在Rails中创建“即将到来的生日”模块?

我有一个表“users”,其列为“date_of_birth”(日期,月份,年份为DATE格式)。 在前端,我需要列出5个即将到来的生日。 花了很长时间试图弄清楚这个逻辑……还浏览了谷歌里所有可能没有运气的文章。 有任何建议如何在RoR中做到这一点? 谢谢!

Rails 3使用SQL IN和SQL OR运算符进行ActiveRecord查询

我正在使用“where”语法编写Rails 3 ActiveRecord查询,该语法使用SQL IN和SQL OR运算符,并且无法弄清楚如何将它们一起使用。 此代码有效(在我的用户模型中): Question.where(:user_id => self.friends.ids) #note: self.friends.ids returns an array of integers 但是这段代码 Question.where(:user_id => self.friends.ids OR :target => self.friends.usernames) 返回此错误 syntax error, unexpected tCONSTANT, expecting ‘)’ …user_id => self.friends.ids OR :target => self.friends.usern… 知道如何在Rails中编写它,或者只是原始SQL查询应该是什么?

从Rails 4应用程序调用大量SQL

我有一个Rails 4应用程序,我与sidekiq一起使用来运行异步作业。 我通常在我的Rails应用程序之外运行的一个作业是一大堆复杂的SQL查询,它们无法真正由ActiveRecord建模。 这组SQL查询与我的Rails应用程序的连接是,它应该在我的一个控制器操作被调用时执行。 理想情况下,我会从控制器中的Rails应用程序中为Sidekiq排队,继续运行查询。 现在它们存储在外部文件中,我不完全确定Rails运行所述SQL的最佳方法是什么。 任何解决方案都很受欢

怎么做Arel中的“where exists”

你如何进行包含Arel中“where exists”的查询? 例如,在这样的查询中,向所有供应商显示至少一个订单: SELECT * FROM suppliers WHERE EXISTS (SELECT * FROM orders WHERE suppliers.supplier_id = orders.supplier_id); 我在Arel文档http://rubydoc.info/gems/arel/2.0.7/Arel/Nodes/Exists中看到“存在”,但我在使用它时遇到了麻烦。

无法在Rails中加入自联接表

我有2个型号 class Category “Category” has_many :children, :class_name => “Category”, :foreign_key => “parent_id” has_many :products attr_accessible :description, :title, :parent end class Product < ActiveRecord::Base belongs_to :category end 特别是,类别有一个标题为“茶”的父项,这个项目有很多儿童项目:“红茶”,“白茶”…… 我需要选择属于父类“茶”的产品。 我是这样做的: Product.joins(:category=>:parent).where(:category=>{:parent=>{:id=>1}}).all 它抛出exception(无法格式化) Product Load (0.8ms) SELECT `products`.* FROM `products` INNER JOIN `categories` ON `categories`.`id` = `products`.`category_id` INNER JOIN `categories` `parents_categories` ON `parents_categories`.`id` = `categories`.`parent_id` WHERE `parent`.`id` […]

Rails中与数据库无关的SQL字符串连接

我想在Rails查询中进行数据库端字符串连接,并以与数据库无关的方式进行。 SQL-92指定双栏( || )作为连接运算符。 不幸的是,它看起来像MS SQL Server不支持它; 它用+代替。 我猜测Rails的SQL语法抽象已经解决了特定于db的运算符问题。 如果确实存在,我该如何使用它?

如何使用Sequel运行原始SQL查询

我还不清楚使用Sequel运行原始SQL查询的正确方法。 目前我正在尝试这个: DB.fetch(“SELECT * FROM zone WHERE dialcode = ‘#{@dialcode}’ LIMIT 1”) do |row| @zonename = row end 如何以原始SQL运行查询然后像正常一样访问结果? if @zonename.name = “UK”

如何在rails中添加条件where子句

我是一个铁杆新手,我正试图在带有rails的桌面上进行搜索,而我只是使用我的sql知识来做到这一点。 但这似乎不像铁路或ruby甚至…… 有没有更好的方法来做我正在做的事情? (基本上,只有在填充时才将日期参数传递给sql) def search(begin_date=nil, end_date=nil) subject = ” and created_at ” if !(begin_date.nil? || end_date.nil?) where_part = subject + “BETWEEN :begin_date AND :end_date” else if (begin_date.nil? && end_date.nil?) where_part = “” else if(begin_date.nil?) where_part = subject + ” = :begin_date” end end end end User.joins(places: {containers: {label: :user}}).where(“users.id= :user_id “+where_part, user_id: self.id, begin_date:begin_date, […]