ページ分割された結果を得るためにテーブルをクエリするときに、合計変数を設定するために行をカウントする別のクエリをよく使用します。
テーブル内の合計ユーザーを返します
SELECT Count(*) FROM users WHERE organizationId = :organizationId
ページ分割された結果を返します
SELECT * FROM users WHERE organizationId = :organizationId LIMIT :start, :end
public SearchResults findAll(User user, Paginator paginator) {
HashMap<String, Object> namedParameters = new HashMap<String, Object>();
namedParameters.put("organizationId", user.getOrganizationId());
namedParameters.put("userId", user.getId());
NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);
//Get count
int total = namedParameterJdbcTemplate.queryForInt(SQL_FIND_ALL_COUNT, namedParameters);
int start = 0;
int end = total;
if(paginator != null) {
start = paginator.getFirst();
end = paginator.getCount();
}
namedParameters.put("start", start);
namedParameters.put("end", end);
SqlRowSet results = namedParameterJdbcTemplate.queryForRowSet(SQL_FIND_ALL, namedParameters);
return new SearchResults(mapUser(results), total);
}
合計を収集する唯一の理由は、検索結果の一部としてそれを返すことができるようにするためです。これはページネーションに必要であるため、実際に結果を渡してすべてのレコードを検索しなくても、ユーザーに表示する結果のページ数がわかります。データベース。
1回のクエリでこれを行う方法はありますか? つまり、LIMIT 条件を使用して特定の量 (一度に 10 レコードなど) のみを照会しながら、合計数を取得します。もしそうなら、パフォーマンスの観点から、これらを別々のクエリに保持する方が理にかなっていますか?
このようなもの?
SELECT *, (SELECT Count(*) FROM users WHERE organizationId = :organizationId) FROM users WHERE organizationId = :organizationId"
上記のクエリが機能する場合、実際にそのサブクエリ列を取得するにはどうすればよいですか?参照できる名前はありますか?
results.getInt("count"); //?