2013-05-24 2 views
0

나는 php + sql을 사용하고 있습니다. 이제 다음과 같은 표를 보았습니다.PHP + SQL 계층 적 배열 결과

user_id word 
------------- 
u1  w1 
u1  w2 
u2  w1 
u2  w3 

그리고 사용자별로 그룹화 된 데이터를 쿼리하려고합니다. 원하는 결과는 내가 그렇게 할 수있는 방법

array("u1"=>array("0"=>"w1', "1"=>"w2"), "u2"=>array("0"=>"w1", "1"=>"w3")) 

처럼 계층 적 배열해야 하는가?

편집

난 단지

select * from DB order by user 

같은 일부 일반 SQL 년대를 썼다 그리고 나는 그것을 가까이 아무것도 두려워.

+0

이 아직 어떤 SQL 쿼리를 쓴 적이 문제가 해결됩니다? – NullPointer

+0

@NullVoid plz 업데이트를 참조하십시오 – SolessChong

답변

1

예는

$query = mysql_query("SELECT * FROM tableName WHERE 1 GROUP BY user_id"); 
While($data = mysql_fetch_object($query)){ 
    $get_data[] = $data ; 
} 

if($get_data){ 
    foreach($get_data as $val){ 
     $query = mysql_query("SELECT * FROM tableName WHERE user_id = '".$val['user_id']."'"); 
     while($data_new = mysql_fetch_assoc($query)){ 
      $val['user_id']; 
      $res[] = $data_new ; 
     } 
     $userID = $val['user_id'] ; 
     $array[][$userID] = $res ; 
    } 
} 
print_r($array); 
+0

더 나은 성능을 가진 @NullVoid에 대한 또 다른 대답이 있습니다. – SolessChong

0

나는 당신이 할 수 없다는 것을 잘 모르겠다.

하지만 다음과 같은 결과를 얻을 수 있습니다.

SELECT user_id 
    , GROUP_CONCAT(DISTINCT word 
     ORDER BY wordDESC SEPARATOR ',') as words 
FROM table_name 
GROUP BY user_id 

결과;

user_id | words 
    u1 | w1,w2 
    u2 | w1,w3 
+0

고맙겠습니다. 확실하게 작동합니다. – SolessChong

1

이 기본적인 예입니다하지만 당신은 *

한 아래 시도 대신에 mysql_로의 PDO를 사용해야합니다, 그것은, 내가 확인하지만보십시오하지 않은 수행 할 수 있습니다 . 그것은

$query = "SELECT * FROM tblwords"; 
$result = mysql_query($query); 
while($row = mysql_fetch_assoc($result)) 
{ 
    $userId = $row['user_id']; 
    $arr[$userId][] = $row['word']; 
} 
echo "<pre>";print_r($arr); 

출력

Array 
(
    [u1] => Array 
     (
      [0] => w1 
      [1] => w2 
     ) 

    [u2] => Array 
     (
      [0] => w1 
      [1] => w3 
     ) 

) 
+0

감사합니다. 나는 당신의 대답이 Purusottam 's와 같다고 생각한다. 그리고 나는 그가 새로운 사람 인 것처럼 보이는 것에 대한 대답으로 그의 것을 선택할 것이다. 그리고 당신의 우아한 일러스트를 위해 +1. – SolessChong

+1

확실히. 우리는 새로운 사람들을 격려해야합니다. 귀하의 문제가 해결되어 다행입니다. 나는 그의 대답을 읽었을뿐 나의 대답은 성과의 경우에 더 정확하다. 루프를 3 번 ​​실행하는 동안 루프를 하나만 사용했습니다. – NullPointer

+0

그래. 나는 당신의 대답이 스크립트와 퍼포먼스 모두에서보다 우아하다고 고백해야한다. – SolessChong