php - 在 PHP MySQL 中连接表时的二维数组
问题描述
我有以下表格projects
:
+----+----------+-------+------------+
| id | name | admin | timestamp |
+----+----------+-------+------------+
| 1 | Group1 | 2 | 1539678214 |
| 2 | Test | 2 | 1539678214 |
+----+----------+-------+------------+
并且users
:
+----+----------------+------------------------+
| id | name | email |
+----+----------------+------------------------+
| 1 | FOO | foo@bar.com |
| 2 | BAR | bar@foo.com |
| 3 | G2W | far@boo.com |
+----+----------------+------------------------+
我运行以下 SQL 命令:
SELECT projects.id,projects.name,users.id as userid,users.email
FROM projects
INNER JOIN users ON users.id=projects.admin;
我得到以下结果:
+----+----------+--------+-----------------+
| id | name | userid | email |
+----+----------+--------+-----------------+
| 1 | Group1 | 2 | bar@foo.com |
| 2 | Test | 2 | bar@foo.com |
+----+----------+--------+-----------------+
这是完美的,这正是我所需要的。现在我的问题是,在 PHP 中执行此操作并在二维数组中获取结果的最佳方法是什么。
这是我到目前为止所拥有的,但我得到了一个一维数组的结果,这是我不想要的:
$stmt = $_DB->prepare("SELECT projects.id,projects.name,users.id as userid,users.email
FROM projects
INNER JOIN users ON users.id=projects.admin");
if($$_DB->error) die($$_DB->error);
$stmt->execute();
$res=$stmt->get_result();
while($result[]=$res->fetch_array(MYSQLI_ASSOC)){}
print_r($result);
结果:
[0] => Array
(
[id] => 1
[name] => Group1
[userid] => 2
[email] => bar@foo.com
)
[1] => Array
(
[id] => 2
[name] => Test
[userid] => 2
[email] => bar@foo.com
)
这就是我要的:
[0] => Array
(
[id] => 1
[name] => Group1
[admin] => Array
(
[id] => 2
[email] => bar@foo.com
)
)
[1] => Array
(
[id] => 2
[name] => Test
[admin] => Array
(
[id] => 2
[email] => bar@foo.com
)
)
解决方案
查询结果将始终采用表格格式(行和列)。基本上,它将是一个数组数组,其中二级数组代表一个特定的行。如果您希望结果位于多维数组中,则必须在获取查询输出后使用 PHP 代码执行此操作:
$res=$stmt->get_result();
// Initialize result variable
$result = array();
// Get results row by row
while( $row = $res->fetch_array(MYSQLI_ASSOC) ) {
// In a temp variable, create the multi-dim array as you wish
$temp['id'] = $row['id'];
$temp['name'] = $row['name'];
$temp['admin'] = array('id' => $row['userid'],
'email' => $row['email']);
// insert the temp result row
$result[] = $temp;
}
print_r($result);
推荐阅读
- node.js - 电子构建器在詹金斯上失败:ENOENT:没有这样的文件或目录,copyfile elevate.exe
- php - Mailchimp addListMember 在已经存在时返回客户端错误 400 错误请求
- swagger - Azure Functions 和 Swagger UI - 如何在 Swagger UI 中显示查询字符串参数?
- openlayers-6 - OpenLayers 基础层(OSM)不如 osm.org 流畅
- c# - C#如何绘制一个像素宽度的线
- php - Symfony 5 表单句柄请求正在执行相同的查询两次
- elasticsearch - 如何使用logstash解析ECS(弹性通用模式)之后的纯文本日志?
- django - 如果我们从 html 输入新的输入,UUID 会重复吗?
- laravel - 使用 Docker Compose 部署 Laravel 网站时出错
- c# - 在 C# 中延迟任务 - 数据库上下文已处置