gpt4 book ai didi

mysql - 从现有查询创建 count() 查询

转载 作者:行者123 更新时间:2023-11-29 00:45:55 28 4
gpt4 key购买 nike

编辑: 我使用 jOOQ 1.6.8 版;在较新的版本中,这应该可以工作(请参阅答案)

我正在为我的 java web 应用程序编写一个网格模型,使用 Jooq 来处理通过分页、排序、...获取数据

首先,我使用 factory.select(...) 创建一个选择,并将此 (SelectConditionStep) 作为参数传递到我的网格模型中,我在其中添加了所需的 .limit().orderBy() 基于参数。

但我现在的问题是我还需要知道结果的总数(不仅仅是 1 页)来计算总页数。所以我的问题是,是否可以通过某种方式从给定的 SelectConditionStep 创建计数查询。

我想将其包装为计数查询中的子查询;类似于:

(不起作用,只是为了展示这个想法)

factory.select(count()).from(selectConditionStep)...

在 MySQL 中我会这样做:

select count(*) from (select ...) as r

我目前的代码:

        private final SelectConditionStep selectStep;
...

@Override
public int getAvailableRows() {

JooqSelect select = new JooqSelect() {

@SuppressWarnings("unchecked")
protected Result<Record> select(Connection connection) throws SQLException {

Factory create = new Factory(connection, dialect);
create.attach(selectStep);

/* This does not compile, just to show what I need */
return create.select(count()).from(selectConditionStep).fetch();
}
};

session.doWork(select);

/* Get result */
return select.getResult()...;
}

最佳答案

您更新的示例提到 count() 是未知的。这实际上是DSL.count() .您有三个选择:

  • 使用selectCount()而不是 select(count())。这是一个方便的方法
  • 完全符合 DSL.count()功能
  • 从工厂静态导入所有方法:

    import static org.jooq.impl.DSL.*;

引用 XYZStep 类型:

作为旁注,您永远不应该觉得需要直接引用 jOOQ XYZStep 类型,它们仅用作实现内部 DSL 的辅助类型。 Here's a blog post explaining what the alternatives are .

关于mysql - 从现有查询创建 count() 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10530469/

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