Php 将两个表的结果合并到JSON数据中
我有两张表格,单词和段落。词语表如下:Php 将两个表的结果合并到JSON数据中,php,mysql,json,Php,Mysql,Json,我有两张表格,单词和段落。词语表如下: +----+---------+--------------+--------+ | id | word_no | paragraph_no | word | +----+---------+--------------+--------+ | 1 | 1 | 1 | hello | +----+---------+--------------+--------+ | 2 | 2 | 1
+----+---------+--------------+--------+
| id | word_no | paragraph_no | word |
+----+---------+--------------+--------+
| 1 | 1 | 1 | hello |
+----+---------+--------------+--------+
| 2 | 2 | 1 | how |
+----+---------+--------------+--------+
| 3 | 3 | 1 | are |
+----+---------+--------------+--------+
| 4 | 4 | 1 | you |
+----+---------+--------------+--------+
+----+--------------+-------------------+
| id | paragraph_no | paragraph |
+----+--------------+-------------------+
| 1 | 1 | hello how are you |
+----+--------------+-------------------+
段落表如下所示:
+----+---------+--------------+--------+
| id | word_no | paragraph_no | word |
+----+---------+--------------+--------+
| 1 | 1 | 1 | hello |
+----+---------+--------------+--------+
| 2 | 2 | 1 | how |
+----+---------+--------------+--------+
| 3 | 3 | 1 | are |
+----+---------+--------------+--------+
| 4 | 4 | 1 | you |
+----+---------+--------------+--------+
+----+--------------+-------------------+
| id | paragraph_no | paragraph |
+----+--------------+-------------------+
| 1 | 1 | hello how are you |
+----+--------------+-------------------+
我希望单词表中的所有列,其中段落_no为1,以及段落表中具有相同WHERE子句的段落列都在一个JSON结果中。大概是这样的:
{
"1": [ <-- this is the paragraph number
"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"
}
]
]
}
{
"1": [ <-- this is the paragraph number
{
"id": "1",
"word_no": "1",
"paragraph_no": "1",
"word": "hello"
},
{
"id": "2",
"word_no": "2",
"paragraph_no": "1",
"word": "how"
},
// and so on...
]
}
它只输出以下文字:
{
"1": [ <-- this is the paragraph number
"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"
}
]
]
}
{
"1": [ <-- this is the paragraph number
{
"id": "1",
"word_no": "1",
"paragraph_no": "1",
"word": "hello"
},
{
"id": "2",
"word_no": "2",
"paragraph_no": "1",
"word": "how"
},
// and so on...
]
}
如何获得所需的JSON输出?为了获得所需的结构,您需要执行两条SQL语句——一条用于获取所有单词,另一条用于获取所有段落
$result_w = $conn->query("SELECT * FROM words;");
$results_w = $result->fetch_all(MYSQLI_ASSOC);
$result_p = $conn->query("SELECT * FROM paragraphs;");
$results_p = $result->fetch_all(MYSQLI_ASSOC);
$paragraphs = [];
foreach($results_p as $key => $row) {
$paragraphs[$row['id']] = $row;
}
$data = [];
foreach($results_w as $key => $row) {
$p_no = $row['paragraph_no'];
$data[$p_no]['words'] = $results_w;
$data[$p_no]['paragraph'] = $paragraphs[$p_no];
}
您现在需要$data的输出吗?谢谢您的回答。您的解决方案几乎可以正常工作,只是现在表中的所有单词都显示在每个段落JSON数组中。我的意思是,它向我展示了:第1段->表格中的所有单词,第2段->表格中的所有单词。然而,我想要的是:第1段->仅第1段文字,第2段->仅第2段文字。我甚至尝试在sql查询中添加WHERE子句,但没有成功。希望我说得清楚。我实际上意识到这个问题是我在问题中没有提到的专栏,因为我认为没有必要,但事实确实如此。稍后我可能会再次提出这个问题,并提供所有细节。感谢您的解决方案,因为它几乎可以正常工作。但由于我犯了一个错误,它不能完全起作用。我又问了一次这个问题。如果您能在那里为我提供一个解决方案,那将很有帮助: