1

私は MySQL と PHP (+ PDO_mysql) を使用しており、私の目標は JSON を返すことです。

Department と Team という 2 つのデータベース テーブルがあります。

部門は基本的に ID + 部門名です。
チームは基本的に id + チーム名と、対応する部門への外部キーです。

チームは 1 つの部門にのみ属することができ、部門は複数のチームを持つことができます (したがって、1 対多の関係)。

このように構造化された 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"
              }
           ]
        }
    ]
}

このように、2 つのテーブル (部門とチーム) の間で INNER JOIN を作成する必要があると思います。
SELECT * FROM team INNER JOIN department ON team.department_id=department.id

…そして私のPHPファイルの使用の最後にjson_encode、しかし私はそこに着く方法がわかりません.

あなたが提供できるどんな助けにも本当に感謝します

4

3 に答える 3

1

これを行う 1 つの方法は、ID 列をキーとする連想配列を使用して、SQL ではなく PHP コードで結合を実行することです。次のコードはまったくテストされていませんが、アイデアは得られます。

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

もう 1 つの方法は、PDO::fetch_group を使用することです。この件について少し調査しましたが、多くの例や詳細なチュートリアルを見つけることができませんでした。でも面白そうです。

于 2013-11-11T18:26:55.773 に答える
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);

これのことですか?

于 2013-10-20T10:20:48.703 に答える
0

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

于 2018-02-14T04:51:40.557 に答える