2012-05-03 36 views
0

幾乎類似這樣的:PHP/mySQL - how to fetch nested rows into multidimensinal array我想查詢連接記錄(左連接)並將它們放入PhP中的數組結構中,如何?

SELECT products.NAME, products_prices.PRICE FROM products LEFT JOIN products_prices ON products.ID = products_prices.PROD_ID 

這通常會導致:

NAME, PRICE 
window, 1000 
window, 1200 
mouse, 1400 

因爲有兩個價格window,有可能是沒有價格的。我希望它是導致數組:

$arr = array(
      array('NAME' => 'window', 'price' => array(
                 array('PRICE' => 1000), 
                 array('PRICE' => 1200) 
                 ), 
      array('NAME' => 'mouse', 'price' => array(
                 array('PRICE' => 1400) 
                ) 
      ); 

左右,加入結果是子陣列。另一個問題可能有多個連接,但只有LEFT JOIN-s。如何很好地做到這一點?鏈接的例子把連接的列放到主要部分,我不想這樣做。

+1

'LEFT JOINS',它們的倍數,差不多一樣好。另一種選擇是'UNION',它變成了子查詢,這有點超出了我目前的能力。 – Malovich

+0

我試過了什麼?沒什麼:D它非常複雜 –

+1

請參閱下面的答案。這並不複雜。但是,如果你從不嘗試,只是要求別人爲你做,它可能看起來很複雜,即使下一次... – Gavriel

回答

2

它應該是這樣的:

$dataStore = array(); 
foreach ($recordSet as $record){ 
    $dataStore[$record['NAME']]['prices'][] = $record['PRICE']; 
} 

這隻能如果你確實知道一個產品的名稱可以有多個價格。

2
//array you get from mysql: 
$arrMysql = array(
      array('NAME' => 'window', 'PRICE' => 1000), 
      array('NAME' => 'window', 'PRICE' => 1200), 
      array('NAME' => 'mouse', 'PRICE' => 1400) 
      ); 

$arr = array(); 
foreach ($arrMysql as $row) { 
    if (isset($arr[$row['NAME']])) { 
     if (isset($arr[$row['NAME']]['price'])) { 
      $arr[$row['NAME']]['price'].push(array('PRICE' => $row['PRICE'])); 
     } else { 
      $arr[$row['NAME']]['price'] = array(array('PRICE' => $arr[$row['NAME']]['PRICE']), array('PRICE' => $row['PRICE'])); 
      unset($arr[$row['NAME']]['PRICE']); 
     } 
    } 
    else { 
     $arr[$row['NAME']] = $row; 
    } 
} 

//you get: 

$arr = array(
      'window' => array('NAME' => 'window', 'price' => array(
                 array('PRICE' => 1000), 
                 array('PRICE' => 1200) 
                 ), 
      'mouse' => array('NAME' => 'mouse', 'price' => array(
                 array('PRICE' => 1400) 
                ) 
      ); 

// and if you want your array: 
$arr = array_values($arr);