2017-11-18 18 views
2

データの挿入率が1秒あたりほぼ5行の膨大な量のデータを含む表。 私はこのテーブルから、limit_offsetとoffsetを使って無限ページネーションを使って、左のジョインをcreated_dateの降順(挿入タイムスタンプを格納)で取得しています。ページングのmysqlオフセットと制限を管理する方法

時間を考慮すると、テーブルから重複したデータを取得することがあります。

現在、私は、1000のデータを持っている、と仮定します。

出力期待

総記録:1000

  1. 第一フェッチ:制限:10を、オフセット:0(期待:1000、999、998、... 991)

  2. 第2フェッチ:制限:10、オフセット:10 ected:990、...、981)

  3. 第三 フェッチ:制限:10を、オフセット:20(予想:980、...、971)

実際のデータ:

  1. 合計レコード:1000

    1フェッチ:制限:10、オフセット:0(実際:1000、999、998、... 991)

  2. 合計レコード:1005

    2フェッチ:制限:10、オフセット:10(実績:995、...、986)

    繰り返しレコード:995,994,993,992,991

  3. 合計レコード:1012

    3フェッチ:制限:10、オフセット:20(実績:992、...、983)

    繰り返しレコード:992,991,990,989,988,987,986

mysqlの現在のリクエストまたはプロシージャで、最初に取得されたレコードIDよりも大きなレコードIDのような別のwhere句を追加せずにデータを適切に取得するロックがありますか?

ソリューション/クエリにさらに詳しい情報が必要な場合は、ご意見ください。

私のクエリは次のとおりです。

SELECT `tab_a`.*, `tab_b`.`likes`, `tab_b`.`comment`, `tab_b`.`share` 
FROM `tab_a` 
LEFT JOIN `tab_b` ON `tab_a`.`id` = `tab_b`.`post_id` 
WHERE post_position IN (?) AND (post_date BETWEEN ? AND ?) 
GROUP BY `tab_a`.`id` ORDER BY `tab_a`.`id` DESC, `tab_b`.`created_date` DESC 
LIMIT 9 OFFSET 0 
+0

する必要があり、990です。 https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple-sql-queryを参照してください。 – Strawberry

答えて

1

が列tab_aを追加してください。 idをwhere句に変換します。クエリを要求するたびに、最後にtab_aの値を追加してみてください。 id(デフォルトはmax tab_aid = 1000)とします。

初めてのクエリ:

select `tab_a`.*, `tab_b`.`likes`, `tab_b`.`comment`, `tab_b`.`share` from `tab_a` 
left join `tab_b` on `tab_a`.`id` = `tab_b`.`post_id` 
where `tab_a`.`id` <= 1000 and post_position in (?) and (post_date between ? and ?) 
group by `tab_a`.`id` order by `tab_a`.`id` desc, `tab_b`.`created_date` desc 
limit 9 offset 0 

二時間クエリ、最後tab_a。最初のクエリ結果からidは、クエリは、クエリをさらに支援するために損失のビットで私を残している、無意味である

select `tab_a`.*, `tab_b`.`likes`, `tab_b`.`comment`, `tab_b`.`share` from `tab_a` 
left join `tab_b` on `tab_a`.`id` = `tab_b`.`post_id` 
where `tab_a`.`id` <= 990 and post_position in (?) and (post_date between ? and ?) 
group by `tab_a`.`id` order by `tab_a`.`id` desc, `tab_b`.`created_date` desc 
limit 9 offset 0 
+0

あなたはその質問だけを理解したと思います。お返事をありがとうございます。しかし、別のwhere句を追加する以外の解決策を探していました。 – subhajit

関連する問題