从一个SQL语句中获取一列中的所有行

时间:2013-04-10 17:00:17

标签: php mysql arrays pdo transpose

我正在寻找一种方法,无论是通过SQL还是PHP,从SQL语句返回许多列,但能够一次遍历一列。

我有一个查询,例如:

ID | N1 | N2
1  | 15 | 20
2  | 25 | 30
3  | 35 | 40

我知道我可以使用foreach $result as $row并在循环中使用$row['T1'],但我正在寻找一种方法将所有$row['T1']放入数组而不必迭代在他们身上。我无法找到如何做到这一点。

我需要一个数组(或一组数组),它们的组织方式如下:

myArray = array( 'N1' => array('15', '25', '35'),
                 'N2' => array('20', '30', '40')
          );

这样我就可以使用array_sum()array_slice()之类的标准数组函数来访问它们。

有没有办法,使用MySQL,PHP(PDO)来简单地以编程方式为大量字段执行此操作?

我的SQL使用复杂的连接来获取许多字段,这些字段需要被平均并打印到文本文件中。他们希望将字段组合在一起,而不是将所有字段放在标准表中。

N1:
   15
   25
   35
N2:
   20
   30
   40

因此需要正确设置数组。

那么:我可以使用哪种方法来做到这一点?我知道我可以迭代整个$result并将$row['index']推送到我自己的几个数组中,但是肯定有更好的方法吗?通过复杂的连接,是否可以更快地单独对每个字段进行单独查询?

2 个答案:

答案 0 :(得分:0)

SELECT n1 FROM yourtable
UNION ALL
SELECT n2 FROM yourtable

当您添加更多列时,这自然会变得非常低效。即使您只发出一个"查询"调用,内部数据库仍然必须单独执行联合中的每个成员查询。


重读你的东西,或许这更符合你想要的,伪代码:

select N1, N2
from yourtable

$data = array()
while($row = fetch($result)) {
   foreach($row as $col => $val) {
      $data[$col][] = $val;
   }
}

答案 1 :(得分:0)

我想出了什么。除了二维数组之外不允许任何其他内容,但我确定另一个for语句可以解决这个问题。这让我可以保留我的钥匙。

// Trasposes, while keeping the keys, a 2-dimensional array.
function transpose($array) {
  $tArray = array();
  foreach ($array as $iKey => $i) {
    foreach ($i as $jKey => $j) {
      $tArray[$jKey][$iKey] = $j;
    }
  }
  return $tArray;
}

结果:

$myArr:
Array
(
    [0] => Array
        (
            [N1] => 15
            [N2] => 20
        )

    [1] => Array
        (
            [N1] => 25
            [N2] => 30
        )

    [2] => Array
        (
            [N1] => 35
            [N2] => 40
        )

    [3] => Array
        (
            [N1] => 45
            [N2] => 50
        )

)

transpose($myArr)
Array
(
    [N1] => Array
        (
            [0] => 15
            [1] => 25
            [2] => 35
            [3] => 45
        )

    [N2] => Array
        (
            [0] => 20
            [1] => 30
            [2] => 40
            [3] => 50
        )

)