sql - 将 3 个查询缩减为单个 SQL 查询以进行服务器端分页
问题描述
本质上,我需要在单个查询中恢复 3 个查询的结果(用于服务器端分页排序)。这有点复杂。
这是包含必填字段的图表。
我需要的两列结果被认为是与功能相关的任务(计数)。
第一个查询成功恢复了我需要的所有行,除了两行。
SELECT DISTINCT vue_cdc_for_opera.libelle as CDC,
vue_cdc_for_opera.id_cdc as \"id\",
COALESCE(vue_cdc_for_opera.signe_ue, vue_cdc_for_opera.signe_fr) as Signe,
vue_cdc_for_opera.classe_ue as \"Classe produit\",
vue_cdc_for_opera.code_cdc as \"Code CDC\",
dt_bdd_produit.libelle_dt as DT,
0 as \"Nombre OCO\",
0 as \"Nombre Operateur\"
FROM vue_cdc_for_opera
INNER JOIN cdc_postgresql ON vue_cdc_for_opera.code_cdc = cdc_postgresql.code_cdc
INNER JOIN dt_bdd_produit ON vue_cdc_for_opera.id_dt = dt_bdd_produit.id_dt
ORDER BY " . $order . " " . $sortOrder . "
OFFSET :offset
LIMIT :limit
为了获得“Nombre Operateur”,我运行以下查询:
SELECT
COUNT(o.id) as \"Nombre Opérateurs\"
FROM habilitation
INNER JOIN operateur o ON habilitation.id_operateur = o.id and o.actif = true
WHERE habilitation.id_cdc_postgresql = :idCdc
AND habilitation.actif = true
为了获得“Nombre OCO”,我运行以下查询:
SELECT id_oc, oc FROM vue_for_lien_oco_cdc WHERE oc != '' AND code_cdc = :codeCdc;
本质上,我需要在单个查询中恢复所有内容,以便能够在服务器端分页中订购“Nombre Operateur”和“Nombre OCO”,这超出了我目前的 SQL 技能。:params
稍后在 PHP 代码中引用绑定参数。
我被告知可以在查询中使用内置 SQL 函数,但我不确定从哪里开始。这是可行的,你有什么线索或可以提供帮助吗?
解决方案
我不知道如何在第一个和第二个查询中使用 DQL 执行 COALESCE 和 ON,但对于最新的我们可以:
$qb->createQueryBuilder('o')
->from(<insert your entity class here>)
->where('o.oc <> ""')
->andWhere('o.code_cdc = :codeCdc')->setParameter('codeCdc',$<insert variable for code_cdc>)
->getQuery()
->getResult();
推荐阅读
- visual-studio - Visual Studio 菜单对齐错误
- swift - 在单独的桌面中打开时在当前桌面上打开 Mac OSX 应用程序
- python - 在 tkinter 中的 Button 小部件命令中使用 lambda 函数
- docker - Docker 停止工作并出现错误消息 OCI 运行时创建失败
- here-api - 这里的地图,如何重用为车队远程信息处理提供的示例中的代码以启动和运行
- node.js - 使用 db.query 方法 node.js 时出现 Heroku H12“请求超时”错误
- ruby-on-rails - Rails:是否可以在不为其创建命名空间的情况下组织子文件夹中的代码?
- google-api - 如何在 CURLRequest CI4 上为 Google API 设置授权承载?
- rust - 如何关闭货物文档测试并为 Rust 中的特定模块编译
- powershell - Visual Studio 代码错误“/bin/sh: 1: powershell: not found”