2017-09-02 2 views
2

からPHPは多次元配列私はこのようになりますmysqlのテーブルがあります。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'を使います。クエリ実行後に何もしませんでした –

答えて

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

:あなたは次のようにあなたの配列を作成するためにPHPの explode()を使用することができます

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

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

これは、次になります

$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