2016-07-05 6 views
1

sequelizeを私のnodejsウェブアプリケーションで使用すると、ページネーション(日付順)を使用して投稿を照会したいと思います。 sequelize docsを読むと、彼らはoffsetlimitを使用するように提案します。ページ分割を続ける

新しい投稿から古い投稿を表示したいので、作成した日付を考慮する必要があります。たとえば、最初のクエリを10ページに制限し、2番目のクエリを実行する前に新しい投稿が作成された場合、オフセットが10の次のクエリは最後のクエリから重複した投稿になります。

新しいエントリをサポートするようにページネーションを実装する方法を教えてください。

答えて

6

安定したページ番号を使用する場合は、言い換えれば、揮発性であるため行オフセットに改ページしないでください。

時間の経過とともに安定している値にページを設定し、結果をフィルタリングするためにwhere句を使用することをお勧めします。あなたが自動インクリメントIDを持っている場合に最も良い場合がありますが、投稿日も合理的かもしれません。以下のような

何か:

Post.findAll({ 
where: { createdDate: { $lt: previousDate }, 
limit: 10 
}) 

あなたはこのOFCのためpreviousDateを追跡する必要があります。このアプローチにはいくつかの注意点もあり、クライアント側の重複排除と組み合わせる必要があるかもしれません。ここで

は、おそらくあなたが必要とするすべての答えを持っているブログ記事です: Pagination: You're (Probably) Doing It Wrong

3

これを行う最も簡単な方法は、ここでSequelizeのfindAndCountAll

Post.findAndCountAll({ 
    where: {...}, 
    order: [...], 
    limit: 5, 
    offset: 0, 
}).then(function (result) { 
    res.render(...); 
}); 

を使用することで、結果は結果の両方を持っていますあなたの質問とカウントはresult.rowresult.countとなります。その後、オフセットをインクリメントし、これを改ページに使用することができます。

Sequelize documentation for findAndCountAll