0

我有两个数据库表。一个包含市场,另一个包含市场的位置。Marketplaces 可以有多个位置,这两个表通过 MarketplaceID 连接。我需要查询市场将其转换为数组,并在 foreach 或 while 期间,将位置作为数组添加到市场。这都是两个 json 响应的一部分。但是,我的目标是将数据组合在一起并有一个 json 响应,其中位置位于市场 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未定义的警告。

编辑现在更新答案,初始查询已从更改WHERE MarketplaceID=1WHERE 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 数据的单维数组,而您的第二个数组是一个多维数组,其中父数组中的每个元素都包含一个子数组,其中包含有关单个位置的信息。如果要将第二个数组放在第一个数组中,请尝试像这样嵌套循环:

$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 回答