還暦過ぎたエンジニアの挑戦

還暦過ぎても好奇心だけは忘れない エンジニア ひかるです

MENU

検索結果と同時に件数も取得する

mysql

SELECT count(*) over () as totalCount, * from  {テーブル};  

検索結果を得たらページネーション*1でわかりやすく表示したい。。。

みたいなことはエンジニアとしては良くある話ですが、全部で何ページあって、今は何ページ目を表示していますのように表現しようとすると、全部で検索結果は何件あるか

という情報も必要になります。

そういう時、実際の検索のSQLとは別に、
もう一度件数を取得するために同じ条件のSQLを再実行するのは仕方がないこと

のように思ってきましたが、こうやって書けばよいのですね

実行するとこんな感じで、すべての行のtotalCountに同じ値がセットされて返ってきました。

f:id:hikaru217:20200525160209j:plain
実行結果例

でも、MySQLのversion8以降で使えるようになった比較的新しい構文らしいですのでご注意を。


*1:検索結果が多い時、複数のページに分割して、読み取りやすくするナビゲーションのことです