gpt4 book ai didi

php - 将两个表的结果合并为 JSON

转载 作者:行者123 更新时间:2023-11-29 06:32:07 26 4
gpt4 key购买 nike

I asked a similar question before但问题中没有包含 book_no 列,并且由于我想要的解决方案必须包含此列才能为我提供正确的 JSON 结构,因此我得到的解决方案不起作用。因此,我将使用正确的信息重新发布此内容。

我有两个表,单词段落words表如下:

+----+---------+--------------+---------+---------+
| id | book_no | paragraph_no | word_no | word |
+----+---------+--------------+---------+---------+
| 1 | 1 | 1 | 1 | hello |
+----+---------+--------------+---------+---------+
| 2 | 1 | 1 | 2 | how |
+----+---------+--------------+---------+---------+
| 3 | 1 | 1 | 3 | are |
+----+---------+--------------+---------+---------+
| 4 | 1 | 1 | 4 | you |
+----+---------+--------------+---------+---------+

paragraph表格如下:

+----+---------+--------------+-------------------+
| id | book_no | paragraph_no | paragraph |
+----+---------+--------------+-------------------+
| 1 | 1 | 1 | hello how are you |
+----+---------+--------------+-------------------+

我希望将 words 表中 WHERE book_no 为 1 的所有列以及段落表中具有相同 WHERE 子句的段落列全部包含在一个 JSON 结果中。像这样:

{
"1": [ <-- this is paragraph_no

"words": [

{
"id": "1",
"word_no": "1",
"paragraph_no": "1",
"word": "hello"
},
{
"id": "2",
"word_no": "2",
"paragraph_no": "1",
"word": "how"
},

// and so on...

],

"paragraph": [

{
"paragraph": "hello how are you"
}

]

]
}

请原谅我的模型,但我需要类似的东西。我当前仅获取单词的 PHP 代码是:

$result = $conn->query("SELECT * FROM words WHERE book_no = 1");

$data = array();

while ($row = $result->fetch_assoc()) $data[$row['paragraph_no']][] = $row; // paragraph_no from 'words' table

$API_RESULT = json_encode($data, JSON_UNESCAPED_UNICODE);

echo $API_RESULT;

它只输出这样的单词:

{
"1": [ <-- this is paragraph_no

{
"id": "1",
"word_no": "1",
"paragraph_no": "1",
"word": "hello"
},
{
"id": "2",
"word_no": "2",
"paragraph_no": "1",
"word": "how"
},

// and so on...

]
}

如何获得所需的 JSON 输出?

最佳答案

这段代码能产生您需要的输出吗?

$result_w = $conn->query("SELECT * FROM words;");
$results_w = $result_w->fetch_all(MYSQLI_ASSOC);

$words_per_paragraph = [];
foreach($results_w as $key => $row) {
$words_per_paragraph[$row['paragraph_no']][] = $row;
}

$result_p = $conn->query("SELECT * FROM paragraph;");
$results_p = $result_p->fetch_all(MYSQLI_ASSOC);

$data = [];
foreach($results_p as $key => $row) {
$p_no = $row['paragraph_no'];
$words = [];
if(array_key_exists($p_no, $words_per_paragraph)) {
$words = $words_per_paragraph[$p_no];
}
$data[$p_no] = [
'words' => $words,
'paragraph' => $row
];
}

$data 的内容(出于测试目的,我没有在第 2 段中添加任何单词):

{
"1":{
"words":{
"id":"4",
"book_no":"1",
"paragraph_no":"1",
"word_no":"4",
"word":"you"
},
"paragraph":{
"id":"1",
"book_no":"1",
"paragraph_no":"1",
"paragraph":"hello how are you"
}
},
"2":{
"words":[

],
"paragraph":{
"id":"3",
"book_no":"1",
"paragraph_no":"2",
"paragraph":"I'm fine and you?"
}
}
}

也许您可以更改数据库表结构,以在一条语句中获取所有内容。

关于php - 将两个表的结果合并为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55680953/

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