【问题标题】:Microsoft SQL group by to get multidimensional array [duplicate]Microsoft SQL group by以获取多维数组[重复]
【发布时间】:2013-10-22 14:23:23
【问题描述】:

我正在使用 PHP 和 Microsoft SQL 2003。

我有这张桌子:

Page | Group
------------
   1 |    1
   2 |    2
   3 |    1
   4 |    2

我需要得到一个按“Group”分组的数组:

Array( 
  1 => Array(1, 3), 
  2 => Array(2, 4)
);

我正在使用 PDO,我想直接从 SQL 获取数组,而不是使用 PHP 循环解析整个结果。

我该怎么办?

【问题讨论】:

  • 这是全数组,生成groups的key明显是"group"
  • @JoeFletch 从问题和返回的数据中可以清楚地看到 OP 试图实现的目标。就从 SQL 语句返回数组而言,除非您使用存储过程,否则您无法执行此操作...
  • 很抱歉给您带来了困惑。我错过了!我将删除我的 cmets!

标签: php sql-server arrays


【解决方案1】:

您不能从 SQL 语句返回多维数组。你当然可以使用存储过程来返回多个记录集,但返回多维数组是不可能的。

因此,我建议采用以下解决方案(未经测试):

$stmt = $pdo->prepare("SELECT Page,Group FROM SOME_TABLE");

$array = array();
if($stmt->execute()) {
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        $array[$row['Group']][] = $row['Page'];
    }
}

这会将页码分组到不同的组中,因此返回一个数组,如下所示:

Array( 
  1 => Array(1, 3), 
  2 => Array(2, 4)
);

【讨论】:

  • 谢谢。在任何 SQL 引擎或仅在 Microsoft SQL 上都不可能吗?
  • 这在任何 SQL 引擎中都是不可能的,因为您无法返回数组!您可以返回一个逗号分隔的列表,但要做到这一点,您需要一个视图或一个存储过程。您不能将数组从 SQL 传递到 PHP,一开始它们是不同的语言...
  • 谢谢,看来我会用你的sn-p。
  • 啊啊啊!!我知道有办法!该死的微软!谢谢
猜你喜欢
  • 2010-10-19
  • 1970-01-01
  • 2014-09-28
  • 2021-03-14
  • 2023-02-11
  • 1970-01-01
  • 1970-01-01
  • 2018-06-27
  • 1970-01-01
相关资源
最近更新 更多