gpt4 book ai didi

php - JSON 对象中的两个 MySQL 查询

转载 作者:行者123 更新时间:2023-11-29 00:26:23 24 4
gpt4 key购买 nike

我正在尝试通过 MySQL 和 PHP 构建以下 JSON。
每个章节都有一个 ID、一个章节标题和一个主题列表。
每个主题都有一个id和一个主题区

{
"Chapters": [
{
"id": "1",
"chapterTitle": "Introduction",
"Topics": [
{
"id": "1",
"topicArea": "C++"
},
{
"id": "2",
"topicArea": "Java"
}
]
},
{
"id": "2",
"chapterTitle": "Getting Started",
"Topics": [
{
"id": "1",
"topicArea": "Start Here"
}
]
}
]
}

但是,如果我尝试以下 PHP 代码 ( 1 ),我将无法生成此输出

//Get all chapters
$result = mysql_query("SELECT * FROM chapters");

while ($row = mysql_fetch_array($result))
{
$json[] = $row;
$json2 = array();
$chapterid = $row["id"];

//Fetch all topics within the first book chapter
$fetch = mysql_query("SELECT id,topicArea FROM topics where chapterid=$chapterid");
while ($row2 = mysql_fetch_assoc($fetch))
{
$json2[] = array(
'id' => $row2["id"],
'topicArea' => $row2["topicArea"]
);
}
$json['Topics'] = $json2; //I think the problem is here!
}
echo json_encode($json);

最佳答案

请不要再使用mysql_* 函数了。 mysqliPDO 都使您能够使用准备好的语句。

话虽如此,您是对的,$json['Topics'] = $json2; 是问题所在:这需要是 $json['Topics'][] = $json2;.

最后,出于性能原因(请参阅 What is SELECT N+1?),您可能需要查看 JOIN。总而言之:

$dbh = new PDO("mysql:host=$db_host;dbname=$db_name", $db_user, $db_pass);
$query = 'SELECT c.id AS chapter_id, c.chapterTitle, t.id as topic_id, t.topicArea FROM chapters c INNER JOIN topics t ON c.id = t.chapterid';
$json = array();
foreach ($dbh->query($query) as $row) {
$json[$row['chapter_id']]['id'] = $row->chapter_id;
$json[$row['chapter_id']]['chapter_title'] = $row->chapter_title;
$json[$row['chapter_id']]['Topics'][] = array(
'id' => $row->topic_id,
'topicArea' => $row->topicArea,
);
}
print json_encode(array_values($json));

关于php - JSON 对象中的两个 MySQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18710376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com