【ページネーション】【MySQL】覚書メモ
実装方針
①MySQLで、全記事件数を取得する。
②MySQLで、全てのページごとに、記事idの境界値(はじめ & おわり)を取得する。
※イメージ
max_id | min_id | page |
78 | 70 | 1 |
69 | 61 | 2 |
60 | 52 | 3 |
51 | 43 | 4 |
42 | 34 | 5 |
33 | 25 | 6 |
24 | 1 | 7 |
②ページネーションを書いていきます
必要な変数
・全記事件数
・現在のページ数
・現在のページに表示する記事の、id(はじめ)
・現在のページに表示する記事の、id(おわり)
・全ページ件数
?
①MySQLで、全記事件数を取得する
これはまあ、素直に書けばいいでしょう。
SELECT *
FROM
ueda_news_03
WHERE
del_flg = 0
ORDER BY
id DESC;
②MySQLで、全てのページごとに、記事idの境界値(はじめ & おわり)を取得する
こちらは、結論のコードを先に書いてしまえば、こうです。
SET @page := 0;
SELECT
MAX(c.id) max_id
,MIN(c.id) min_id
,c.page
FROM(
SELECT
b.id id
,b.row_num
,b.row_num%9
,(CASE b.row_num%9 WHEN 0 THEN @page := @page +1 ELSE @page END) page
FROM
(SELECT
a.id
,(SELECT COUNT(*) FROM ueda_news_03 b WHERE b.id > a.id) AS row_num
FROM
ueda_news_03 a
ORDER BY
a.id DESC) b
) c
BY
c.page;
*1:※参考サイト※