【问题标题】:Converting sql query to active record for selecting from multiple tables将 sql 查询转换为活动记录以从多个表中进行选择
【发布时间】:2015-09-21 14:49:46
【问题描述】:

我正在尝试找到一种将 sqlite3 查询转换为活动记录格式的方法。

我的查询是:

SELECT first_name,last_name,title,checkin,checkout
FROM books, checkouthistories, users
WHERE checkouthistories.isbn = isbn and books.isbn = isbn AND
      checkouthistories.email = users.email`

我确实知道如何使用 select 函数和 where 子句从一个表中进行选择,但我无法找到使用多个表和多个 where 子句的方法

【问题讨论】:

  • 好吧,你遇到了一些问题。 1) SELECT 中的哪一列属于哪个表? 2)表之间的关系是什么? 3)如果你需要从多个表中聚合数据,为什么不创建一个视图,然后通过ActiveRecord从视图中选择?
  • 名字和姓氏来自用户表,标题来自书籍表和签入,签出来自 checkouthistory 表。
  • 好的,太好了。现在你有 2 个问题要回答。 1)什么是关系? 2) 你考虑过使用视图吗?
  • @SrdjanPejic 我没有考虑过使用视图。我不确定我应该如何使用它们,尤其是在 ActiveRecords 的上下文中。同样对于 user 表中的每个电子邮件 ID,checkouthistory 表中将有多个记录。此外,对于 book 表中的每个 isbn,checkouthistory 表中都会有多个签入、签出值
  • 视图看起来像 ActiveRecord 的表格,这是一个如何做到这一点的示例,benfranklinlabs.com/…。另外,如果这里有实际关系,@tim5046 提供的解决方案将是一个很好的起点。

标签: ruby-on-rails activerecord sqlite


【解决方案1】:

尝试这样的事情(我不知道你的关联和模型到底是什么样的,所以当你添加更多细节时,我会更新我的答案):

Books.
joins("JOIN checkouthistories ON books.isbn = checkouthistories.isbn").
joins("JOIN users ON checkouthistories.email = users.email").
select("User.first_name, User.last_name, Book.title, Checkouthistory.checkin,Checkouthistory.checkout")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多