2013-03-20 42 views
1

我有以下MySQL數據庫:
PHP,MySQL的 - 結合導致成多維關聯數組

| id   | sessionId | time    | 
    |------------|-------------|---------------------| 
    | 54   |   4 | 2013-03-23 09:00:00 | 
    | 55   |   4 | 2013-03-23 09:15:00 | 
    | 56   |   5 | 2013-04-20 01:00:00 | 
    | 57   |   5 | 2013-04-20 15:15:00 | 
    | 58   |   5 | 2013-04-20 19:15:00 | 

我試圖返回數組像這樣:

Array 
    (
     [0] => Array 
      (
       [sessionId] => 4 
       [time] => Array 
        (
         [0] => 2013-03-23 09:00:00 
         [1] => 2013-03-23 09:15:00 
        ) 

      ) 

     [1] => Array 
      (
       [sessionId] => 5 
       [time] => Array 
        (
         [0] => 2013-04-20 01:00:00 
         [1] => 2013-04-20 15:15:00 
         [2] => 2013-04-20 19:15:00 
        ) 

      ) 

    ) 

到目前爲止運行此查詢

$result = mysql_query("SELECT * FROM `Exercise_Lists_New` WHERE `patientId` = 381"); 
    $row = mysql_fetch_assoc($result); 
    while($row = mysql_fetch_array($result)){ 
     $sessionIds[] = array("sessionId" =>$row['sessionId'], "time" => array($row['time'])); 
    } 
    print_r($sessionIds,true); 

給我的follwing

Array 
     (
      [0] => Array 
       (
        [sessionId] => 4 
        [time] => Array 
         (
          [0] => 2013-03-23 09:00:00 
         ) 

       ) 

      [1] => Array 
       (
        [sessionId] => 4 
        [time] => Array 
         (
          [0] => 2013-03-23 09:15:00 
         ) 

       ) 

      [2] => Array 
       (
        [sessionId] => 5 
        [time] => Array 
         (
          [0] => 2013-04-20 01:00:00 
         ) 

       ) 

      [3] => Array 
       (
        [sessionId] => 5 
        [time] => Array 
         (
          [0] => 2013-04-20 15:15:00 
         ) 

       ) 

      [4] => Array 
       (
        [sessionId] => 5 
        [time] => Array 
         (
          [0] => 2013-04-20 19:15:00 
         ) 

       ) 

     ) 

因此,我想將所有共享'sessionId'的'時間'分組在一起。 什麼是最好的方式來做到這一點使用PHP。

感謝

+1

嘗試,如果你願意,你從查詢'GROUP''ed獲取數據,你爲什麼堅持在PHP這樣做?爲什麼不使用'GROUP_CONCAT','GROUP BY'或任何其他方式對結果集進行分組。另外:停止使用已棄用的'mysql_ *'擴展名 – 2013-03-20 14:12:40

回答

1

只是嘗試:

while($row = mysql_fetch_array($result)){ 
    if (!isset($sessionIds[$row['sessionId']])) { 
     $sessionIds[$row['sessionId']] = array(
      'sessionId' => $row['sessionId'], 
      'time'  => array() 
     ); 
    } 
    $sessionIds[$row['sessionId']]['time'][] = $row['time']; 
} 
+0

謝謝你這個完美的作品 – 2013-03-20 14:38:41

2
SELECT 
    sessionId, 
    GROUP_CONCAT(time) AS `Times` 
FROM mytable 
GROUP BY sessionId 

您可以使用MySQL的GROUP_CONCAT這一點。這會給你結果作爲逗號分隔的領域,你可以用PHP爆炸得到一個數組。

輸出:

| sessionId | time               | 
|-------------|--------------------------------------------------------------- | 
|   4 | 2013-03-23 09:00:00 , 2013-03-23 09:15:00      | 
|   5 | 2013-04-20 01:00:00 , 2013-04-20 15:15:00 , 2013-04-20 19:15:00| 

EDITED:

$query = " SELECT 
        sessionId, 
        GROUP_CONCAT(time) AS `Times` 
       FROM mytable 
       GROUP BY sessionId"; 

$result = mysqli_query($query); 
$row = mysqli_fetch_assoc($result); 
$result_array = array(); 
$i=0; 
while($row = mysql_fetch_array($result)){ 
    $result_array[$i]['sessionId'] = $row['sessionId']; 
    $result_array[$i]['time']  = explode(',',$row['Times']); 
    $i++; 
} 
print_r($result_array,true); 

結果

Array 
    (
     [0] => Array 
      (
       [sessionId] => 4 
       [time] => Array 
        (
         [0] => 2013-03-23 09:00:00 
         [1] => 2013-03-23 09:15:00 
        ) 

      ) 
     [1] => Array 
      (
       [sessionId] => 5 
       [time] => Array 
        (
         [0] => 2013-04-20 01:00:00 
         [1] => 2013-04-20 15:15:00 
         [2] => 2013-04-20 19:15:00 
        ) 

      ) 
    ) 
0

地帶一個關閉該陣列的水平,並使用會話ID作爲鍵,例如

$sessionIDs = array(); 
while($row = mysql_fetch_array($result)){ 
    $sessionIds[$row['sessionID']][] = $row['time']; 
} 

這會給你這樣的:

$arr = array(
    'id' => array(time1, time2, time3, ...), 
    'id' => arraY(...) 
    etc.. 
); 

注意,你在你的代碼失去一排,當你做你循環的fetch()外呼,然後立即覆蓋該$row在foreach循環中使用fetch調用。

0

與此

<?php 

$result = mysql_query("SELECT * FROM `Exercise_Lists_New` WHERE `patientId` = 381"); 
$row = mysql_fetch_assoc($result); 
while($row = mysql_fetch_array($result)){  
    $sessionIds[$row['sessionId']]['sessionId'] = $row['sessionId']; 
    $sessionIds[$row['sessionId']]['time'][] = $row['time']; 
} 

print_r($sessionIds): 

Array 
    (
     [4] => Array 
      (
       [sessionId] => 4 
       [time] => Array 
        (
         [0] => 2013-03-23 09:00:00 
         [1] => 2013-03-23 09:15:00 
        ) 

      ) 

     [5] => Array 
      (
       [sessionId] => 5 
       [time] => Array 
        (
         [0] => 2013-04-20 01:00:00 
         [1] => 2013-04-20 15:15:00 
         [2] => 2013-04-20 19:15:00 
        ) 
      ) 

    ) 
+0

這給了我多個sessionIDs – 2013-03-20 14:29:56

+0

我的錯誤,我已經修復 – rkmax 2013-03-20 14:56:21