[英]One to many database relationship to JSON
我使用MySQL和PHP(+ PDO_mysql),我的目标是返回一些JSON。
我有两个数据库表,部门和团队。
部门基本上只是一个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
,但是我不知道如何到达那里。
我非常感谢您可以提供的任何帮助
一种方法是使用ID列上键入的关联数组在PHP代码中而不是在SQL中执行连接。 请注意,以下代码完全未经测试,但是您可以理解。
$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。 我对该主题进行了一些研究,但找不到太多示例或详细教程。 它看起来确实很有趣。
$pdo=new PDO("mysql:dbname=database;host=127.0.0.1","user","password");
$statement=$pdo->prepare("SELECT * FROM team INNER JOIN department ON team.department_id=department.id");
$statement->execute();
$results=$statement->fetchAll(PDO::FETCH_ASSOC);
$json=json_encode($results);
你是这个意思?
使用PDO::fetch_group
可根据第一列对记录进行分组。
这是一个例子:
$data = $pdo->query('SELECT sex, name, car FROM users')->fetchAll(PDO::FETCH_GROUP);
array (
'male' => array (
0 => array (
'name' => 'John',
'car' => 'Toyota',
),
1 => array (
'name' => 'Mike',
'car' => 'Ford',
),
),
'female' => array (
0 => array (
'name' => 'Mary',
'car' => 'Mazda',
),
1 => array (
'name' => 'Kathy',
'car' => 'Mazda',
),
),
)
来源范例: https : //phpdelusions.net/pdo
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.