質問: **ページングで使用するデータを取得するため、LIMIT と OFFSET を使用したいのですが、 LIMIT と OFFSET を決めるためには、最初に全体件数を取得する必要があると思います** --- **Q.1回のSQLで処理することは出来ない?** ・「たくさん結合しているSQL」なので出来れば1回で済ませたい場合でも、全体件数を取得するためには最初にSQL実行するしか手はないのでしょうか? **処理の流れ** ・最初に件数を取得するためだけにSQL文を実行して全体件数を取得し、そこから割り出した、LIMIT と OFFSET を使用し、実際にデータを取得するしかない? ・結局、同じSQLを2回実行せざるを得ない? --- **追記** ・Google検索のようなイメージです > > FITSTへ 前へ 5 6 7 8 9 10 11 12 13 14 次へ LASTへ > > > ・データはMySQLへ格納している前提 ・例えば、500件データを格納している内のSELECT結果が200件だった場合、1ページ表示数に応じて分割して取得 ・1ページ表示数10件と指定した場合は、全部で200ページに分割して表示
回答: MySQL の SELECT には SQL_CALC_FOUND_ROWS オプションというのがあります。 このオプションをつけて LIMIT つきの SELECT を実行後、FOUND_ROWS() 関数で全件数を取得することが出来ます。