Php 来自 mysql 的多维数组
Php multi-dimensional array from mysql
我有一个 mysql table 看起来像这样:
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'),
);
我正在使用 select 查询:
$result = mysql_query("SELECT id_item,id_transaction from transaction_item ")or die("<br/><br/>".mysql_error());
有人知道怎么做吗?
以这种方式使用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 次来构建您的数组。
1.Don不使用 mysql_*
它现在已被弃用+删除。为此
使用 mysqli_*
或 PDO
2.You查询执行后没有做任何事情。
A 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);
?>
我有一个 mysql table 看起来像这样:
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'),
);
我正在使用 select 查询:
$result = mysql_query("SELECT id_item,id_transaction from transaction_item ")or die("<br/><br/>".mysql_error());
有人知道怎么做吗?
以这种方式使用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 次来构建您的数组。
1.Don不使用 mysql_*
它现在已被弃用+删除。为此
mysqli_*
或 PDO
2.You查询执行后没有做任何事情。
A 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);
?>