2013-03-07 2 views
0

У меня есть две таблицы базы данных. Один содержит Marketplace, а другой содержит локации торговых площадок. На торговых площадках может быть несколько мест, к которым соединяются две таблицы с помощью MarketplaceID. Мне нужно запросить, чтобы рынки включали его в массив, а во время foreach или while добавляли местоположения в виде массива на рынки. Это все часть двух ответов json. Однако моя цель состоит в том, чтобы объединить данные вместе и иметь один ответ json, где местоположения находятся на рынке json-данных как «Locations». В конечном итоге массив, в котором Marketplaces является родителем, а местоположения - это дети.Добавить массив SQL PHP в уже существующий массив

Код 1 (Table1 Query):

$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"}] 

Code 2 (Table2 Query):

$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 protected]","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 protected]","StoreNumber":"300"}] 
+1

Для чего вам нужен комбинированный результат? – Barmar

+0

Прежде всего, вам нужно подумать о том, почему вы это сделали: '$ row = mysql_fetch_assoc (..)' then foreach '$ row', чтобы создать ** точно ** тот же массив под другим именем' $ arr ' – Popnoodles

+0

Почему вы создаете массив в Code 1? Там может быть только один рынок с ID = 1. – Barmar

ответ

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; 
} 

поэтому объект будет

+0

. Я могу передать MarketplaceID во второй запрос. Я пробовал это и не работал: $ sql = "SELECT * FROM Locations WHERE MarketplaceID = '". $ Marketplace [' MarketplaceID ']. "'"; – user1157800

+0

Я извиняюсь за замешательство и пытаюсь упростить, чтобы упростить его, но это только что сделало его tuffer = P. Теперь я понимаю немного больше, как вы все видели, и вы видели большую картину без объяснения мне. Первый запрос обновляется до этого (более 1 места): $ sql = "SELECT * FROM Marketplaces WHERE Status = 1"; и второй $ sql = "SELECT * FROM Locations WHERE MarketplaceID = '". $ Marketplace [' MarketplaceID ']. "'"; Как я могу добавить для каждой спины, чтобы сделать эту работу? – user1157800

+0

Свежие обновления. Пропущенный $ sql2 в $ results2 = line – Popnoodles

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, который вы добавляете к $ main_arr, должен иметь следующие элементы: «MarketplaceID», «AccountID», «BusinessName», «BusinessType», «Status», «CreationDate», «location », а« location »должен быть массивом, содержащим элементы в виде массивов, содержащих информацию о местоположении, вытащенную из вашей базы данных.

Надеюсь, это ответит на ваш вопрос.

Смежные вопросы