2013-10-20 21 views
0

我使用MySQL和PHP(+ PDO_mysql),我的目標是返回一些JSON。與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兩個表(部門和團隊)這樣的銜接:
SELECT * FROM team INNER JOIN department ON team.department_id=department.id

...並在我的PHP文件使用json_encode結束,但我不知道如何到達那裏。

我真的很感激任何幫助,您可以提供

回答

0
$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); 

你說這個?

+0

不是真的。這只是給了我的球隊的名單與相應的部門ID: [ { 「ID」: 「1」, 「teamname」: 「黑色N」白」, 「部門標識」: 「1」, 「主頁 「: 」www.some.thing「 },{ 」ID「: 」2「, 」teamname「: 」團隊-1337「, 」部門標識「: 」2「, 」主頁「:」 www.some.thing「 } ] –

1

執行此操作的一種方法是在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。我對這個主題做了一些研究,但無法找到很多例子或詳細的教程。它確實看起來很有趣。