You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Drizzle ORM 分页查询与总数统计:如何避免过滤逻辑重复?

优化Drizzle分页查询的重复过滤逻辑

你当前的代码需要为数据查询和总数统计重复编写过滤逻辑,确实有更简洁的实现方式——先构建统一的带过滤条件的基础查询,再基于它分别扩展分页查询和总数统计查询,这样过滤逻辑只需要写一次,还能保证两个查询的过滤规则完全一致。

优化后的代码实现

const drizzle = await db();

// 第一步:构建统一的基础过滤查询(仅包含过滤条件,暂不添加分页、排序)
let baseQuery = drizzle.select().from(verTable);

// 统一给基础查询添加所有过滤条件
if (title) {
  baseQuery = baseQuery.where(ilike(verTable.title, `%${title}%`));
}
if (industryDesc) {
  baseQuery = baseQuery.where(
    or(
      ilike(verTable.industry, `%${industryDesc}%`),
      ilike(verTable.desc, `%${industryDesc}%`)
    )
  );
}
if (state) {
  baseQuery = baseQuery.where(ilike(verTable.state, `%${state}%`));
}
if (company) {
  baseQuery = baseQuery.where(ilike(verTable.company_name, `%${company}%`));
}

// 第二步:基于基础查询扩展出分页数据查询和总数统计查询
const rowsQuery = baseQuery.orderBy(verTable.id).limit(limit).offset(offset);
const totalQuery = drizzle.select({ value: count() }).from(baseQuery.as('filtered_data'));

// 并行执行两个查询提升效率
const [rows, total] = await Promise.all([rowsQuery, totalQuery]);

优化点说明

  1. 消除重复代码:过滤逻辑只编写一次,分页和统计查询复用同一个基础过滤规则,避免后续修改过滤条件时需要两处同步修改。
  2. 提升执行效率:使用Promise.all并行执行两个查询,比串行执行节省时间。
  3. 逻辑一致性:确保数据查询和总数统计的过滤条件完全一致,不会出现数据列表和总数不匹配的问题。

内容的提问来源于stack exchange,提问作者povici

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 20:22:57