logo

额外区块类型 (EBT) - 全新的布局构建器体验❗

额外区块类型 (EBT) - 样式化、可定制的区块类型:幻灯片、标签页、卡片、手风琴等更多类型。内置背景、DOM Box、JavaScript 插件的设置。立即体验布局构建的未来。

演示 EBT 模块 下载 EBT 模块

❗额外段落类型 (EPT) - 全新的 Paragraphs 体验

额外段落类型 (EPT) - 类似的基于 Paragraph 的模块集合。

演示 EPT 模块 滚动

滚动
01/10/2025, by Ivan

要按指定字段进行分组,请使用 groupBy() 方法。

$query->groupBy('uid');

上面的代码会指示查询按 uid 字段进行分组。请注意,这里的字段名必须是通过 addField() 或 addExpression() 方法创建的别名,因此在大多数情况下,你需要使用这些方法的返回值,以确保使用的是正确的别名。

如果你想获取按某个字段(例如 uid)分组的行数,可以这样做:

$query->addExpression('count(uid)', 'uid_node_count');

要按多个字段分组,只需多次调用 groupBy(),按照所需顺序即可。

Having

可以为聚合值添加条件。

$query->having('COUNT(uid) >= :matches', [':matches' => $limit]);

在这个示例中,会找到 uid 数量大于或等于 $limit 的情况。请注意,having 的第一个参数在传入数据库之前不会被过滤,因此用户输入的值必须通过第二个参数传递。

groupBy 和 having 示例

以下代码统计了每个 UID 的节点数量:

$query = $connection->select('node', 'n')
  ->fields('n', ['uid']);
$query->addExpression('count(uid)', 'uid_node_count');
$query->groupBy("n.uid");
$query->execute();

下面的代码基于前一个示例,限制结果只返回至少有 2 条记录的 uid:

$query = $connection->select('node', 'n')
    ->fields('n',['uid']);
$query->addExpression('count(uid)', 'uid_node_count');
$query->groupBy("n.uid");
$query->having('COUNT(uid) >= :matches', [':matches' => 2]);
$results = $query->execute();