2013-04-10 3 views
1

SQL 또는 PHP를 통해 SQL 문에서 많은 열을 반환하지만 한 번에 한 열씩 반복 할 수있는 방법을 찾고 있습니다.하나의 SQL 문에서 하나의 열에있는 모든 행 잡기

나는 예를 들어 저를 제공하는 쿼리가 : 나는이 foreach $result as $row로 통과 루프에서 $row['T1']을 사용할 수 있습니다 알고

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

을,하지만 난에 모든 $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 

따라서 어레이를 올바르게 설정해야합니다.

So : 이렇게하려면 어떤 방법을 사용할 수 있습니까? 나는 $result 전체를 반복 할 수 있고 $row['index']을 내 자신의 배열에 푸시 할 수 있다는 것을 알고 있지만, 확실하게 이것을 수행하는 더 좋은 방법이 있습니까? 복잡한 조인을 사용하면 각 필드에 대해 개별적으로 별도의 쿼리를 수행하는 것이 더 빠릅니까?

답변

0
SELECT n1 FROM yourtable 
UNION ALL 
SELECT n2 FROM yourtable 

더 많은 열을 추가하면 자연히 매우 비효율적입니다. 내부적으로 하나의 "쿼리"호출 만 실행하더라도 내부적으로 DB는 여전히 유니온의 각 구성원 쿼리를 별도로 실행해야합니다.


아마도 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

+0

글쎄, 당신은 "한 번에 한 칼럼"이라고했습니다. 그래서 이것은 한 가지 방법 일 것입니다. 그러나 나머지를 다시 읽으면, 나는 당신이 무엇을 얻고 있는지 보게됩니다. –

+0

그게 내가 지금까지 결국 배열을 옮겨 놓은 것입니다. 쿼리의 출력을 허용하는 PHP 또는 SQL의 내장 함수가없는 것처럼 보입니다. 성능이 꽤 좋아 보인다. 아마'array_map'으로 더 좋은 성능을 얻을 수는 있지만'$ col' 인덱스를 잃어 버릴 수 있습니다 (수치 적으로 인덱스되지 않은 연관 형이므로) – StuckAtWork

0

. 2-D 배열을 제외하고는 아무 것도 허용하지 않지만 다른 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 
     ) 

) 
관련 문제