sql >> データベース >  >> RDS >> Mysql

json_encodeを実行するときに、同じ変数内に複数の行(mysql)の結果をもたらすにはどうすればよいですか?

    私があなたを正しく理解していれば、テーブルtPCN 各PCR番号に関連付けられた複数の行を含めることができます。そして、これらすべての行をフェッチして、JSONで返します。

    それを実現したいが、他の2つのテーブルが1行だけを返すようにする場合は、単にJOIN to tPCNを削除する必要があると思います。 最初のクエリで、次に2番目のクエリを作成してtPCNをフェッチします 特に行。

    $output = [];
    $stmt = $dbConnected->prepare("SELECT * FROM change_management.tPCR INNER JOIN change_management.tcomplement ON change_management.tPCR.PCRNo = change_management.tcomplement.PCRNo WHERE tPCR.PCRNo = ?");
    $stmt->bind_param('s', $_POST['pcr_number']);
    $stmt->execute();
    $result = $stmt->get_result();
    
    //select a single row from the result and assign it as the output variable
    if ($row = $result->fetch_assoc()) {
        $output = $row;
    }
    
    $stmt2 = $dbConnected->prepare("SELECT * FROM change_management.tPCN WHERE PCRNo = ?");
    $stmt2->bind_param('s', $_POST['pcr_number']);
    $stmt2->execute();
    $result2 = $stmt2->get_result();
    $output["tPCN"] = array(); //create a new property to put the tPCN rows in
    
    //loop through all the tPCN rows and append them to the output
    while ($row2 = $result2->fetch_assoc()) {
        $output["tPCN"][] = $row2;
    }
    
    echo json_encode($output);
    

    これにより、この種の構造を持つJSONが生成されます:

    {
      "PCRNo": "ABC",
      "CreationDate": "2019-08-07",
      "Name": "A N Other",
      //...and all your other properties, until the new one:
      "tPCN": [
        {
          "SomeProperty": "SomeValue",
          "SomeOtherProperty": "SomeOtherValue",
        },
        {
          "SomeProperty": "SomeSecondValue",
          "SomeOtherProperty": "SomeOtherSecondValue",
        }
      ]
    }
    

    次に、新しい構造を処理できるようにJavaScriptコードを修正する必要があります。どのフィールドがtPCNから来ているのか正確にはわからないので 表では、その例を示すことはできませんが、配列をループして、見つかったエントリごとに同じHTMLを出力する必要があることは明らかです。

    N.B.ご覧のとおり、プリペアドステートメントとパラメーター化されたクエリを使用するようにクエリコードを書き直したので、将来的に安全な方法でコードを作成する方法を確認できます。

    P.S.個々のフィールドの値を設定するためだけに、「success」関数に多くのコードがあります。単純なJSテンプレートエンジンを使用してこれを冗長で面倒なものにし、適切な場所に値が自動的に追加された必要なHTMLを生成することを検討することをお勧めします。ただし、これは別の問題であり、コードの保守性のためだけです



    1. 1つの特定のサーバーでのあいまいな列名エラー

    2. JSON文字列をMySQLデータベースに保存する

    3. SSMSを使用してSQLServerエージェントジョブを作成する

    4. PHPからデータベースにアクセスするための最良の方法は何ですか?