gpt4 book ai didi

php - 与 JSON 的一对多数据库关系

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

我使用 MySQL 和 PHP (+ PDO_mysql),我的目标是返回一些 JSON。

我有两个数据库表,Department 和 Team。

一个部门基本上就是一个id + 部门名称。
一个团队基本上是一个 id + 团队名称和对应部门的外键。

一个团队只能属于一个部门,一个部门可以有多个团队(因此是一对多关系)。

我想返回一些以这种方式构造的 JSON:

{
"departments": [
{
"departmentname": "Kids",
"teams": [
{
"teamname": "Black n' white",
"homepage": "www.some.thing"
},
{
"teamname": "Team-1337",
"homepage": "www.some.thing"
}
]
},
{
"departmentname": "Kids",
"teams": [
{
"teamname": "I <3 Sundays",
"homepage": "www.some.thing"
},
{
"teamname": "Stack Overflow",
"homepage": "www.some.thing"
}
]
}
]
}

我想我必须以这种方式在两个表(部门和团队)之间进行 INNER JOIN:
SELECT * FROM team INNER JOIN department ON team.department_id=department.id

... 在我的 PHP 文件末尾使用 json_encode,但我不知道如何到达那里。

非常感谢您提供的任何帮助

最佳答案

一种方法是在 PHP 代码中执行联接,而不是在 SQL 中使用以 ID 列为键的关联数组。请注意,以下代码根本没有经过测试,但您明白了。

$pdo=new PDO("mysql:dbname=database;host=127.0.0.1","user","password");
$statement=$pdo->prepare("SELECT * FROM team WHERE department_id IN (SELECT department.id FROM department)");// get teams in departments
$statement->execute();
$teams=$statement->fetchAll(PDO::FETCH_ASSOC);
$statement=$pdo->prepare("SELECT * FROM department"); // get departments
$statement->execute();
$departments=$statement->fetchAll(PDO::FETCH_ASSOC); // Assumes that department id it the first field

// merge the teams with the departments
foreach($teams as $team){
$teamDept = $departments[$team["department_id"]];// The department of current team
// Create an associative list keyed on team id inside the departments
if(!array_key_exists("teams", $teamDept))// Create team array in department if not exist
$teamDept["teams"] = array(); // Unsure if I need to do this.
$teamDept["teams"][$team["id"]] = $team;
}
$json=json_encode($departments);

另一种方法是使用 PDO::fetch_group。我对该主题进行了一些研究,但找不到太多示例或详细教程。不过看起来确实很有趣。

关于php - 与 JSON 的一对多数据库关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19476190/

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