ぽあ~~

【ページネーション】【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