【发布时间】:2019-07-15 16:39:33
【问题描述】:
我正在尝试学习 PDO 和 PHP。 假设我有一个如下所示的数组:
$_var1 = [
'key' => [
'title' => 'Title',
'icon' => 'icon1',
'items' => [
'set1' => [
'title' => 'Subtitle1',
'url' => 'url'
],
'set2' => [
'title' => 'Subtitle 2',
'url' => 'url'
]
]
],
];
我正试图弄清楚这在 SQL db 中会是什么样子,以及如何通过 PDO 从 SQL 中读回它。
我尝试创建 2 个表;父母和孩子;
PARENT
id (ai)
nav_key varchar(256) utf8mb4_general_ci
title varchar(256) utf8mb4_general_ci
icon varchar(256) utf8mb4_general_ci
item varchar(256) utf8mb4_general_ci
CHILD
id (ai)
parent_id varchar(256) utf8mb4_general_ci
set varchar(256) utf8mb4_general_ci
title2 varchar(256) utf8mb4_general_ci
url varchar(256) utf8mb4_general_ci
SELECT parent.nav_key, parent.title, parent.icon, parent.item,
child.set, child.title2, child.url
FROM parent
JOIN child on parent.id = child.parent_id
Array (
[0] => Array
( [nav_key] =>
[title] => test1
[icon] => icon1
[item] =>
[set] =>
[title2] => sub1
[url] => suburl
)
)
它看起来很近,但我被卡住了............
我正在尝试让查询的输出与 PHP 数组匹配。
------------在下面编辑 --------- --
所以我仍在努力理解这一点。用户“你的常识”为我指明了正确的方向(我假设) 于是我去了他的网站,看了下例子(Example below)
$sql = "SELECT c.id as c_id, c.name as c_name, c.url,
p.id as p_id, p.name as p_name, p.price
FROM category c
JOIN product p ON p.category_id=c.id
ORDER BY c.name, p.name
LIMIT ?,?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$start, $limit]);
$data = [];
while ($row = $stmt->fetch()) {
if (!isset($data[$row['c_id']])) {
$row['c_id'] = [
'name' => $row['c_name'],
'url' => $row['url'],
'products' => [
[
'id' => $row['p_id'],
'name' => $row['p_name'],
'price' => $row['price'],
],
],
];
} else {
$row['c_id']['products'][] = [
'id' => $row['p_id'],
'name' => $row['p_name'],
'price' => $row['price'],
];
}
}
这应该创建一个像我正在谈论的那样的数组。 但是,如果我复制此代码并制作数据库,它将无法正常工作。
我创建了数据库,我看到查询在 mysql 命令行上运行。
如果我print_r($stmt) 我看到了正确的查询,如果我手动将查询输入到 SQL 中,它会返回值,但 $data 数组是空的……我不明白。
我在这里缺少什么?
【问题讨论】:
-
如果您描述的表与您的查询中的列相匹配,它会有所帮助
-
child表中是否有 2 行链接到此父级? -
我可能遗漏了一些巨大的东西,但是链接到这个父级是什么意思?我根据匹配的 id (parent_id = child.parent_id) 加入 2 个表
-
对不起家长阅读
main -
你能详细说明一下吗?或者也许将我指向涵盖此内容的正确文档