序:
我在过去几个月里一直在构建一个简单的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)
现在,我在这里向专家提出几个问题:
从我看到的情况来看,查询似乎有效。但是,我可以通过任何其他方式改进查询(例如,使查询更简洁,改进查询以使其更快)?
据我所知,我也可以创建索引来进行查询 快点。有人可以指点我或指向右边 我应该为这个特定查询创建哪些索引的方向?
提前感谢您的时间和帮助!