Как объединить каждую строку данных вместе? - PullRequest
0 голосов
/ 08 ноября 2019

В PHP я хочу добавить каждую строку вместе.
Вот краткий пример моей собственной базы данных:

c(CorporateID,CompanyName)
o(CorporateID,OutletID)
os(OutletID,StaffName)

Данные:

c ТАБЛИЦА:

CorporateID   CompanyName
-----------   -----------
1             A&B Company

o ТАБЛИЦА:

CorporateID   OutletID
-----------   --------
1             1
1             2
1             3

ОС ТАБЛИЦА:

OutletID   StaffName
--------   ---------
1          Jeannie
1          Zoey
1          Jasmine
2          James
2          Catherine
3          Ada

Часть PHP

$conn = new mysqli(server, dbuser, dbpw, db);
$query = "
    SELECT o.*, c.*, os.* 
    FROM Outlet o, Company c, OutletStaff os
    WHERE c.CorporateID = o.CorporateID
    AND o.OutletID = os.Outlet_ID";
$result = $conn->query($query);

$outp = "[";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($outp != "[") {$outp .= ",";}
    $outp .= '{"CompanyName":"'. $rs["CompanyName"].' - Outlet'. $rs["OutletID"].'",';
    $outp .= '"Worker":"'.$rs["StaffName"].'"}';
}
$outp .="]";

$conn->close();

echo($outp);

Вывод

[{"CompanyName": "A & B - Outlet1", "Worker": "Джинни""},
{" CompanyName ":" A & B - Outlet1 "," Worker ":" Zoey "},
{" CompanyName ":" A & B - Outlet1 "," Worker ":" Jasmine "},
{"CompanyName": "A & B - Outlet2", "Worker": "James"},
{"CompanyName": "A & B - Outlet2", "Worker": "Catherine"},
{"CompanyName ":" A & B - Outlet3 "," Worker ":" Ada "}]

Как вы можете видеть, есть повторяющиеся companyname из-за разных работников в этой розетке.

Вот что я ожидаю:

[{"CompanyName": "A & B - Outlet1", "Worker": "Jeannie, Zoey, Jasmine"},
{"CompanyName ":" A & B - Outlet2 "," Worker ":" James, Catherine "},
{" CompanyName ":" A & B - Outlet3 "," Worker ":" Ada "}]

Может ли это сделать? Я лично чувствую, что есть что-то, что связано со строкой 13 PHP:

$outp .= '"Worker":"'.$rs["StaffName"].'"}';

Может быть, мне нужно выполнить цикл, затем поместить его в переменную, а затем поместить в этот вывод?
Как мне этого добиться?

1 Ответ

0 голосов
/ 10 ноября 2019

Предположим, что ваш ответ MySQL выглядит следующим образом:

$result = [
    [
        "company_name" => "ABC",
        "worker" => "Dipesh"
    ],
    [
        "company_name" => "CDE",
        "worker" => "Ramesh"
    ],
    [
        "company_name" => "CDE",
        "worker" => "Mukhesh"
    ]
];

Вы можете просто создать ассоциативный массив со своим уникальным ключом, как показано в фрагменте кода ниже.

$res = [];
foreach($result as $value){
 $company_name = $value['company_name'];
 if( isset($res[$company_name]) ){
    $res[$company_name] = array_merge($res[$company_name], [$value['worker']]);
 }else{
     $res[$company_name] = [$value['worker']]; 
 }
}

И затемКомбинируйте ключи и значения, чтобы легко получить нужный ответ, используя функцию php implode.

$result = [];
foreach($res as $key => $val){
   $result[] = [
     'company_name' => $key,
     'worker' => implode($val,",")
   ];   
}

А для ответа JSON вы можете просто позвонить json_encode($result), чтобы получить требуемый результат.

[
  {
    "company_name": "ABC",
    "worker": "Dipesh"
  },
  {
    "company_name": "CDE",
    "worker": "Ramesh,Mukhesh"
  }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...