繁体   English   中英

将两个表的结果合并为JSON数据

[英]Combining results from two tables into JSON data

我有两个表, wordsparagraph words表如下:

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

paragraph表如下:

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

我希望words表WHERE paragraph_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"
            }

        ]

    ]
}

请原谅我的模型,但我需要类似的东西。 我当前仅能得到的PHP代码是:

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

$data = array();

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

$API_RESULT = json_encode($data, JSON_UNESCAPED_UNICODE);

echo $API_RESULT;

仅输出这样的单词:

{
    "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的输出了吗?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM