【发布时间】:2021-05-19 11:20:40
【问题描述】:
是否可以使用 DBAL QueryBuilder 构建如下所示的嵌套 SELECT 语句?
SELECT i.id, i.stable_id, i.version, i.title
FROM initiatives AS i
INNER JOIN (
SELECT stable_id, MAX(version) AS max_version FROM initiatives GROUP BY stable_id
) AS tbl1
ON i.stable_id = tbl1.stable_id AND i.version = tbl1.max_version
ORDER BY i.stable_id ASC
目标是查询包含每个数据集不同版本的外部非 TYPO3 表。仅应呈现具有最高版本号的数据集。数据库如下所示:
id, stable_id, version, [其余数据行]
stable_id是数据集的外部id。 id 是内部自动增量 ID。而version 也会自动递增。
代码示例:
$queryBuilder = GeneralUtility::makeInstance(ConnectionPool::class)->getQueryBuilderForTable($this->table);
$result = $queryBuilder
->select(...$this->select)
->from($this->table)
->join(
'initiatives',
$queryBuilder
->select('stable_id, MAX(version) AS max_version' )
->from('initiatives')
->groupBy('stable_id'),
'tbl1',
$queryBuilder->and(
$queryBuilder->expr()->eq(
'initiatives.stable_id',
$queryBuilder->quoteIdentifier('tbl1.stable_id')
),
$queryBuilder->expr()->eq(
'initiatives.version',
$queryBuilder->quoteIdentifier('tbl1.max_version')
)
)
)
->orderBy('stable_id', 'DESC')
我无法找出 ON ... AND 语句的正确语法。有什么想法吗?
【问题讨论】:
标签: typo3 greatest-n-per-group query-builder