0

2 つのデータベース テーブルがあります。1 つはマーケットプレイスを含み、もう 1 つはマーケットプレイスの場所を含みます。Marketplace には、MarketplaceID によって結合された 2 つのテーブルが複数の場所を持つことができます。マーケットプレイスをクエリして配列に変換し、foreach または while の実行中に、場所を配列としてマーケットプレイスに追加する必要があります。これはすべて、2 つの json 応答の一部です。ただし、私の目標は、データを組み合わせて、場所が「場所」としてマーケットプレイスのjsonデータ内にある1つのjson応答を持つことです。最終的に、Marketplaces が親で Locations が子である配列です。

コード 1 (Table1 クエリ):

$sql = "SELECT * FROM Marketplaces WHERE Status = 1";
$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result)){   
  foreach($row as $key => $value){
      $arr[$key] = $value;
  }
  $main_arr[] = $arr;
}
return $main_arr;

結果:

[{"MarketplaceID":"1","AccountID":"0","BusinessName":"Mike's Pub","BusinessType":"1","Status":"1","CreationDate":"0000-00-00 00:00:00"}]

コード 2 (Table2 クエリ):

$sql = "SELECT * FROM Locations WHERE MarketplaceID = 1";
$results = mysql_query($sql);

while($row = mysql_fetch_assoc($results)){
  foreach($row as $key => $value){
    $arr[$key]=$value;
  }
  $main_arr[] = $arr;
}

結果:

[{"LocationID":"1","MarketplaceID":"1","Address1":"5055 Business Center Drive","Address2":"Suite 100","City":"San Francisco","CA":"1","Zip":"90210","Phone1":"(555) 555-555","Phone2":"(555) 555-5555","EmailAddress":"email@msn.com","StoreNumber":"200"},{"LocationID":"2","MarketplaceID":"1","Address1":"112 Street Court","Address2":"","City":"Los Angeles","StateID":"2","Zip":"90210","Phone1":"(555) 555-6666","Phone2":"","EmailAddress":"email@gmail.com","StoreNumber":"300"}]
4

2 に答える 2

0

まず、これを落とします

  foreach($row as $key => $value){
      $arr[$key] = $value;
  }

$arr = $row;と同じこと以外は何もしません。実際には別のことを行います-$arr未定義として警告を生成します。

EDIT最初のクエリが から に変更されたため、回答が更新されWHERE MarketplaceID=1ましたWHERE Status = 1"

$main_arr=array();
$sql = "SELECT * FROM Marketplaces WHERE Status = 1";
$result = mysql_query($sql);
while($row = mysql_fetch_assoc($result)){   
  $row['locations']=array();
  $sql2 = "SELECT * FROM Locations WHERE MarketplaceID = ".$row['MarketplaceID'];
  $results2 = mysql_query($sql2);
  while($row2 = mysql_fetch_assoc($results2)){
      $row['locations'][]=$row2;
  }
  $main_arr[] = $row; 
}

// print_r($main_arr); and view page source to read, rather than a JSON string

実際には、以下のように、配列が Marketplace 内の場所を混乱させずに、それらをまとめて保持できるように、これを少し異なる方法で行います。

while($row = mysql_fetch_assoc($result)){   
  $thisrow=array('marketplace'=>$row, 'locations'=>array());
  $sql2 = "SELECT * FROM Locations WHERE MarketplaceID = ".$row['MarketplaceID'];
  $results2 = mysql_query($sql2);
  while($row2 = mysql_fetch_assoc($results2)){
      $thisrow['locations'][]=$row2;
  }
  $main_arr[] = $thisrow; 
}

したがって、オブジェクトは

{ 
    "marketplace": {"MarketplaceID": 1, "BusinessName": "Fred Bloggs", ... }
    "locations": [
        {"LocationId": 1, "Address1": "Some address"},
        {"LocationId": 2, "Address1": "Some address"}
    ]
}
于 2013-03-07T03:01:05.223 に答える
0

私の読みが正しければ、最初の配列は Marketplace 1 のデータを格納する 1 次元配列であり、2 番目の配列は多次元配列であり、親配列の各要素には、単一の場所に関する情報を含む子配列が含まれます。最初の配列内に 2 番目の配列を配置する場合は、次のようにループをネストしてみてください。

$sql = "SELECT * FROM Marketplaces WHERE MarketplaceID = 1";
$result = mysql_query($sql);

while($row = mysql_fetch_assoc($result)){   

  foreach($row as $key => $value){
  $arr[$key] = $value;

}

$sql2 = "SELECT * FROM Locations WHERE MarketplaceID = 1";
$results2 = mysql_query($sql2);

while($row2 = mysql_fetch_assoc($results2)){

  foreach($row2 as $key => $value){
  $arr2[$key]=$value;

}

$arr['locations'] = $arr2;

$main_arr = $arr;

}

これにより、位置データを格納する一時配列 $arr2 が作成され、$arr['locations'] に格納されます。コードの最後に、$main_arr に追加する $arr には次の要素が必要です: "MarketplaceID","AccountID","BusinessName","BusinessType","Status","CreationDate","location "、"location" は、データベースから取得した位置情報を含む配列として要素を含む配列である必要があります。

これがあなたの質問に答えることを願っています。

于 2013-03-07T03:08:39.160 に答える