2017-09-02 78 views
2

多維數組我有一個MySQL表看起來像這樣:從PHP MySQL的

id | id_transaction | id_item | 
1 | it0001  | T0001  | 
2 | it0001  | T0002  | 
2 | it0001  | T0003  | 
3 | it0002  | T0001  | 
4 | it0002  | T0003  | 
5 | it0003  | T0003  | 
6 | it0003  | T0004  | 

,我試圖建立一個將結束這樣看多維數組:

Array 
(
    array('T0001','T0002','T0003'), 

    array('T0001','T0003'), 

    array('T0003','T0004'), 

); 

我使用的選擇查詢:

$result = mysql_query("SELECT id_item,id_transaction from transaction_item ")or die("<br/><br/>".mysql_error()); 

有誰知道如何做到這一點?

+2

1.不要使用'mysql_ *'它棄用+現在去除。使用'mysqli_ *'或者'PDO'來處理這個2.你在查詢執行後沒有做任何事情 –

回答

4

1.不使用mysql_*現已棄用+現在刪除。使用mysqli_*PDO爲此

2.您在查詢執行後沒有做任何事情。

一個mysqli_*版本的代碼是: -

<?php 
    $dbhost = 'localhost'; //change credentails 
    $dbuser = 'root';//change credentails 
    $dbpass = '';//change credentails 
    $dbname = 'TUTORIALS';//change credentails 
    $conn = mysqli_connect($dbhost, $dbuser, $dbpass,$dbname); 

    if(! $conn) { 
     die('Could not connect: ' . mysqli_error()); 
    } 
    $sql = 'SELECT id_item,id_transaction from transaction_item'; 
    $result = mysqli_query($conn, $sql) or die(mysqli_error($conn)); 
    $final_array = array(); 
    if (mysqli_num_rows($result) > 0) { 
     while($row = mysqli_fetch_assoc($result)) { 
      $final_array[$row['id_transaction']][] = $row['id_item']; 
     } 
     echo "<pre/>";print_r(array_values($final_array)); 
    } else { 
     echo "0 results"; 
    } 
    mysqli_close($conn); 

?> 
+0

好吧,它的工作,但我怎麼能得到沒有id_transaction的結果? 我剛剛編輯了這個問題。 謝謝。 –

3

使用GROUP_CONCAT以這種方式:

SELECT id_transaction, GROUP_CONCAT(id_item) 
FROM transaction_item 
GROUP BY id_transaction 

這將導致如下:

+----------------+-------------------+ 
| id_transaction | id_item   | 
+----------------+-------------------+ 
| it001   | T0001,T0002,T0003 | 
+----------------+-------------------+ 
| it002   | T0001,T0003  | 
+----------------+-------------------+ 
| it003   | T0003,T0004  | 
+----------------+-------------------+ 

然後你可以使用PHP的explode()通過以下方式來創建數組:

$result = mysqli_query($conn, $sql_query); 

while($row = mysqli_fetch_assoc($result)) { 
    $final[] = explode(',', $row["id_item"]); 
} 

print_r($final); 

這樣做會給你更快結果,因爲PHP只會迭代3次來構建數組。

+0

我只是不理解組合連接點的事項而只是爲了再次爆炸。 – Strawberry

+0

@Strawberry在讓SQL執行工作時性能更快。如果沒有,你最終會用php重複太多次。小數據集不是那麼明顯,但是當您想到一個大列表時,差別非常明顯 – CodeGodie

+2

我懷疑事實恰恰相反。 – Strawberry