これはおそらく、ページ付けを可能にするためのものです。行の総数を表示すると、非常にコストがかかる可能性があります。
さまざまなデータベースでうまく機能することがわかった1つの方法は、作業を2つの部分に分割することです。まず、一時テーブルの関連する行のIDを収集します。次に、完全なデータセットをクエリします。最初の部分で収集されたデータは、特定のページの行の総数と行のIDを計算する簡単な方法を提供します。
これはSQLServerの大まかな例です。この例は、row_number()
のようなウィンドウ関数に依存していないことに注意してください。 、MySQLでは使用できません。
create table #id_list (rn int identity, pk int);
insert #id_list
(pk)
select customer_id
from customers
where name like '%Joe%';
select (select count(*) from #id_list) as total_rows
, rn -- The row's number
, name
, birth_date
, ... -- Other columns
from #id_list id
join customer c
on c.pk = c.customer_id
where rn between 15 and 29; -- Second 15-row page
ちなみに、可能であれば、この要件を設計者に返して、これに多くの時間を費やす価値があるかどうかを再確認します。行の総数を表示する必要がない場合は、はるかに簡単です。