2013-04-10 40 views
1

我正在尋找一種方法,通過SQL或PHP來返回SQL語句中的許多列,但能夠一次一個列地遍歷它們。從一條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']推入我自己的幾個陣列中,但肯定有更好的方法來做到這一點?通過複雜的連接,對每個字段分別進行單獨查詢會更快嗎?

回答

0
SELECT n1 FROM yourtable 
UNION ALL 
SELECT n2 FROM yourtable 

隨着添加更多列,這自然會變得非常低效。儘管您只發出一個「查詢」調用,但內部數據庫仍需分別執行聯合中的每個成員查詢。


重新讀你的東西,也許this'd沿着你想要的更多,在僞代碼:

select N1, N2 
from yourtable 

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

這是不是產生:'$ myArray的=陣列(15,25,35,20,30,40)'或類似,只是附加的結果,而不是分隔條件? – StuckAtWork 2013-04-10 17:08:38

+0

好吧,你確實說過「一次一列」。所以這是一種方式。但重新閱讀剩下的內容,我會看到你在看什麼。 – 2013-04-10 17:14:05

+0

這就是我到目前爲止,基本上轉置陣列。看起來好像沒有任何內容來自PHP或SQL,它允許查詢的輸出。表現看起來不錯。我可以用'array_map'獲得更好的性能,但是我失去了'$ col'索引(因爲它是關聯的,而不是數字索引的) – StuckAtWork 2013-04-11 12:12:54

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 
     ) 

) 
相關問題