来自mysql的php多维数组

Posted

技术标签:

【中文标题】来自mysql的php多维数组【英文标题】:Php multi-dimensional array from mysql 【发布时间】:2018-02-11 03:33:03 【问题描述】:

我有一个如下所示的 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());

有人知道怎么做吗?

【问题讨论】:

1.不要使用mysql_*,它现在已被弃用+删除。使用mysqli_*PDO 2. 查询执行后你没有做任何事情 【参考方案1】:

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);

?>

【讨论】:

好的,它成功了,但是没有 id_transaction 我怎么能得到结果呢?我刚刚编辑了这个问题。谢谢。【参考方案2】:

以这种方式使用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 次来构建您的数组。

【讨论】:

我只是不明白组连接一些东西只是为了再次爆炸它的意义。 @Strawberry 让 SQL 完成工作时性能更快。如果没有,你最终会用 php 迭代太多次。小数据集不是那么明显,但当你想到一个大列表时,区别就很明显了 我怀疑情况正好相反。 但是如果没有 id_transaction 我怎样才能得到结果呢?我刚刚编辑了这个问题。谢谢。

以上是关于来自mysql的php多维数组的主要内容,如果未能解决你的问题,请参考以下文章

MYSQL父子同表; PHP 将子代嵌套在父代中作为多维数组

如何将多维PHP数组转换为html表

来自匹配mysql列的多维数组[关闭]

来自 SQL 查询的多维数组

如何从 mySQL 和 PHP 检索结果为多维数组?

MySQL 中使用 PHP 的多维数组和聚合函数?