ECTO - 按照多对多关系排序

时间:2016-07-15 01:52:24

标签: elixir ecto

序:

我在过去几个月里一直在构建一个简单的stackoverflow克隆来教自己elixir,ecto和凤凰框架。我有一段时间没有这么多乐趣。

问题:

我正处于尝试按其收到的赞成数量对问题进行排序的那一点。

这是我的问题架构:

schema "questions" do
    ... 
    belongs_to :user, User

    has_many :answers, Answer
    has_many :upvotes, QuestionUpvote

    many_to_many :upvoting_users, User, join_through: QuestionUpvote

    timestamps
end

这是我的upvote架构:

schema "question_upvotes" do
    belongs_to :question, Question
    belongs_to :user, User

    timestamps
end

经过几个小时的谷歌搜索和阅读各种Ecto文档,这是我提出的查询。

具体来说,我想找到今天发布的所有问题,并按照收到的赞成数量排序。

questions_sort_by_upvotes =
    from q in Question,
    left_join: up in assoc(q, :upvotes),
    where: q.inserted_at == ^ Timex.today
    order_by: [desc: count(up.id), desc: q.inserted_at],
    group_by: q.id,
    select: q,
    preload: [:answers, :upvotes, :user]

questions = Repo.all(questions_sort_by_upvotes)

现在,我在这里向专家提出几个问题:

  1. 从我看到的情况来看,查询似乎有效。但是,我可以通过任何其他方式改进查询(例如,使查询更简洁,改进查询以使其更快)?

  2. 据我所知,我也可以创建索引来进行查询 快点。有人可以指点我或指向右边 我应该为这个特定查询创建哪些索引的方向?

  3. 提前感谢您的时间和帮助!

0 个答案:

没有答案