2017-06-07 11 views
0

テーブルA:データを配列するフィールドを選択する方法は?

idA: 1, name: John; 

テーブルB:

idB: 1, product: milk, idA: 1; 
idB: 2, product: egg, idA: 1; 

そして私はついにJSONの結果はそのようになりたい:私はPHPとMySQLを使用してい

[ 
    { 
     "idA": 1, 
     "name": "John", 
     "TableB": [ 
      { 
       "idB": 1, 
       "product": "milk", 
       "idA": 1 
      }, 
      { 
       "idB": 2, 
       "product": "egg", 
       "idA": 1 
      } 
     ] 
    } 
] 

。 クエリはどのようにする必要がありますか? ありがとうございます! 英語がうまくないのですみません。

+0

あなたのコードがある – ASR

+0

私は内部結合を使用しようとしていますが、それはちょうど私に複数の行を与える –

+1

それはあなたがIDA 1のためにTableBから選ぶために2行を持っているので、あなたのクエリまたはコードを見ることができません。 – ASR

答えて

0

Mysqliまたはpdoを使用してください。以下のコードを確認してください。私はテストしませんでしたが、うまくいくはずです。

// Create connection 
$conn = mysqli_connect($servername, $username, $password, $dbname); 

// Check connection 
if (!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
} 

$sql = "SELECT * FROM TableA ORDER BY idA"; 

$result = mysqli_query($conn, $sql); 

if (mysqli_num_rows($result) > 0) { 

    $rows = array(); 
    while ($row = mysqli_fetch_array($result)) { 
    $rows[] = $row; 

    $sqlSub = "SELECT * FROM TableB WHERE idA = '{$row['idA']}' ORDER BY idB"; 
    $resultSub = mysqli_query($conn, $resultSub); 

    if (mysqli_num_rows($resultSub) > 0) { 
     while ($rowSub = mysqli_fetch_array($resultSub)) { 

      $rows[]['TableB'][] = $rowSub; 
     } 
    } 

    } 

    echo json_encode($rows); 
} else { 
    echo "no results found"; 
} 
+0

N + 1の問題はどのようになっているのですか?このようにしないでください。 – ankhzet

0

このクエリはあなたに単一の行を返します。私はそれをテストしなかったが、それはうまく動作するはずです。

select tA.idA,name, group_concat(idB) as cIdB, 
group_concat(product) as cProduct , 
group_concat(tB.idA) as cIdA 
from Table A tA 
left join Table B tB on tA.idA = tB.idA group by tB.idA 

それは、配列は次のようになり返す必要があります。

idA   1 
name   Jhon 
cIdB   1,2 
cProduct  milk,egg 
cIdA   1,1 

はそれがお役に立てば幸いです。 PHPで

select TableA.*, TableB.* from TableA, TableB where TableA.idA = TableB.idA 

フォーマットデータ:

$formattedResults = array(
"idA" => $result.idA, "name" => $result.name, "TableB" => array(); 
); 
foreach ($results as $result) { 
    $formattedResults["TableB"][] = array("idB"=> result.idB, "product"=> 
    result.product, "idA"=> result.idA;); 
} 

$json = json_encode($formattedResults); 
0

は内部でSQLからの行が参加ゲット?私たちにあなたの努力を示してください。
関連する問題