javascript - 从数据库中获取嵌套 JSON 的最佳方法是什么?

标签 javascript php mysql sql api

例如我有两个表:

PRODUCTS (id, category_id, name);
CATEGORIES (id, name);

我想像这样传递给前端 JSON:

"categoryProjects": [
    {
        "id" : 1,
        "name" : "some category name",
        "projects": [
            {
                "id": 1,
                "name": "Product1"
            },
            {
                "id": 2,
                "name": "Product2"
            },
        [   
    },
    {
        "id" : 2,
        "name" : "second category name",
        "projects": [
            {
                "id": 3,
                "name": "Product3"
            }
        [   
    }
]

我的问题是:最好的方法是什么?我希望它尽可能高效。我在 php、数据库 (mysql) 中有简单的服务器,我想创建 API。我想知道为我的前端做端点的最好方法是什么。

最佳答案

你需要做一个 SQL 连接,像这样

select products.*, categories.name as category from products left join categories on products.category_id = categories.id

然后将返回的表映射到一个PHP数组并将其转换为JSON。

<?php
$sth = $pdo->query("select products.*, categories.name as category from products left join categories on products.category_id = categories.id");
$rows = $sth->fetchAll(PDO::FETCH_ASSOC);

$categories = [];

foreach ($rows as $row)
{
    if (!isset($categories[$row['category_id']]))
    {
        $categories[$row['category_id']] = [
            "name" => $row['category'],
            "id" => $row['category_id'],
            "products" => []
        ];
    }

    $categories[$row['category_id']]['products'][] = [
        "id" => $row['id'],
        'name' => $row['name']
    ];
}

print json_encode($categories, JSON_PRETTY_PRINT);

假设您的表是按照您描述的方式构建的,此代码将运行。

关于javascript - 从数据库中获取嵌套 JSON 的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38178009/

相关文章:

javascript - 正则表达式删除 [] 和之间的所有项目

ubuntu - 启动 PHP5-FPM 失败

javascript - 从 mysql 和 php 检索 json 数据到 jquery

python - 如何修复 django.db.utils.IntegrityError : duplicate key value violates unique constraint?

javascript - 如果使用 chrome 中的上下文菜单粘贴,jquery 粘贴事件不会触发

Javascript 多维数组问题

java - 使用 websocket 和 Java Server 进行低延迟通信

php - Laravel 停止事件传播

php - 加入两个查询,一个包含简单选择,一个包含函数?

python - 如何使用Python迭代Mysql数据库查询?