gpt4 book ai didi

MySQL 在查询中包含计数作为变量

转载 作者:行者123 更新时间:2023-11-29 01:43:46 26 4
gpt4 key购买 nike

在查询分页结果的表时,我经常使用单独的查询来计算行数以设置总变量。

返回表中的总用户数

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);
}

收集总数的唯一原因是我可以将其作为搜索结果的一部分返回,因为它是分页所必需的,所以我知道要向用户显示多少页结果而不必实际传递结果并查找数据库中的每条记录。

有没有一种方法可以在一个查询中执行此操作?所以换句话说,获取总计数,同时仍然使用 LIMIT 条件仅查询特定数量(比如一次 10 条记录)。如果是这样,从性能的角度来看,将它们保留在单独的查询中是否更有意义?

是这样的吗?

SELECT *, (SELECT Count(*) FROM users WHERE organizationId = :organizationId) FROM users WHERE organizationId = :organizationId"

如果上述查询有效,我如何实际获取该子查询列,它是否有我可以引用的名称?

results.getInt("count"); //?

最佳答案

在子查询后添加ALIAS

SELECT  *, 
(
SELECT Count(*)
FROM users
WHERE organizationId = :organizationId
) `COUNT`
FROM users
WHERE organizationId = :organizationId

查询中的替代解决方案是使用 CROSS JOIN

SELECT  *, x.totalCount
FROM users,
(
SELECT Count(*) totalCount
FROM users
WHERE organizationId = :organizationId
) x
WHERE organizationId = :organizationId

关于MySQL 在查询中包含计数作为变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12720083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com