通过MySQL

时间:2016-06-25 07:34:07

标签: mysql sql ruby-on-rails

我有三种模式:

笔记,章节和书籍

注释可以引用章节(chapter_id)或引用书籍(book_id)。另外,章节中有一本书(book_id)。

每章都引用一个客户端(client_id),每个客户端都引用一个用户(user_id)

我想找到特定用户可以阅读的所有不同注释。这些是属于该用户的章节注释和这些章节中的书籍。

目前我有这个问题:

SELECT * FROM notes n 
JOIN chapters c ON (c.id = n.chapter_id OR c.book_id = n.book_id)
JOIN clients cl ON (cl.id = c.client_id)
JOIN users u ON (u.id = cl.user_id)
WHERE u.id = my_user_id

因为我想在我的模型上运行它,因为我之后使用kaminari进行分页,所以我这样做(使用Note模型):

Note.joins(
%(
JOIN chapters c ON (c.id = n.chapter_id OR c.book_id = n.book_id)
JOIN clients cl ON (cl.id = c.client_id)
JOIN users u ON (u.id = cl.user_id)
).
where("u.id = :id", id: given_user_id).
distinct

这个查询运行速度很慢,我觉得这是由于JOIN子句中的OR(我之前从未见过或做过),因为我尝试了两个单独的查询(一个到

获取章节注释和另一个获取书籍注释)

我想知道解决此问题的正确方法是什么,以确保结果是可分页的。

0 个答案:

没有答案