У меня есть таблица Stories
и таблица Post
. Каждый Story
содержит многократный Posts
(Story.hasMany(models.Post);
, Post.belongsTo(models.Story);
)Найти последние n записей, упорядоченных по ассоциации
То, что я пытаюсь достичь в список первых 10 Истории заказанные Posts.createdAt
. Таким образом, возможно, что первая запись - старейшая история, но с очень новой Почтой.
То, что я пытаюсь сейчас заключается в следующем:
var options = {
limit: 10,
offset: 0,
include: [{
model: models.sequelize.model('Post'),
attributes: ['id', 'createdAt'],
required: true
}],
order: [
[models.sequelize.model('Post'), 'createdAt', 'DESC'],
['createdAt', 'DESC']
],
attributes: ['id', 'title', 'createdAt']
};
Story.findAll(options)...
Что дает мне этот SQL-запрос:
SELECT "Story".*, "Posts"."id" AS "Posts.id", "Posts"."createdAt" AS "Posts.createdAt"
FROM (SELECT "Story"."id", "Story"."title", "Story"."createdAt"
FROM "Stories" AS "Story"
WHERE (SELECT "StoryId"
FROM "Posts" AS "Post"
WHERE ("Post"."StoryId" = "Story"."id") LIMIT 1) IS NOT NULL
ORDER BY "Story"."createdAt" DESC LIMIT 10) AS "Story"
INNER JOIN "Posts" AS "Posts" ON "Story"."id" = "Posts"."StoryId"
ORDER BY "Posts"."createdAt" DESC, "Story"."createdAt" DESC;
Проблема здесь состоит в том, что если 11-й элемент имеет очень новый пост он не отображается в верхнем списке 10.
Как я могу получить ограниченный список историй, заказанных Posts.createdAt
?
Спасибо за SlideShare мне очень нравится идея опуская смещения. –