【问题标题】:Convert an Sql request into json but with a specific format将 Sql 请求转换为 json 但具有特定格式
【发布时间】:2017-06-21 09:02:50
【问题描述】:

我的问题:我可以使用 Json 格式,但不是我想要的格式。然后我向您展示我的代码,然后向您展示我想要的 Json 模型。我不知道如何继续,如果我必须更改我的 php 代码、我的 js 代码或我的数据库,我认为这是不适合我的 fetchAll() 数组。我真的需要帮助......代码正在运行它只是不是好的格式。我仅将 AngularJs、Html、Css 和 php 用于 sql 请求和数据库。我告诉你我正在使用什么,因为它可能存在 Js 或 php 甚至我的 sql 请求中可能不合适的解决方案......

我的php代码:

$request = $bdd->prepare('
    SELECT z.name zoneName, c.name columnName, w.name woodName 
    FROM zones z
    JOIN columns c ON (c.ID_zone = z.ID)
    JOIN woods w ON (w.ID_column = c.ID)
    ');

$request->execute();
$result = $request->fetchAll(PDO::FETCH_ASSOC);
echo json_encode($result);

我在 Json 中的结果:

        [{"zoneName":"A1","columnName":"C1","woodName":"10-27-050-03\/17"},
        {"zoneName":"A1","columnName":"C1","woodName":"42-27-050-03\/17"},
        {"zoneName":"A1","columnName":"C2","woodName":"20-23-050-03\/17"},
        {"zoneName":"A2","columnName":"C3","woodName":"90-37-050-03\/17"}]

我想要的结果:

{"zoneName":[{"columnName": [[{"id":"woodName"},{"id":"woodName"},...]]},{"columnName": [[{"id":"woodName"},{"id":"woodName"}, ...]]},...],"zoneName":[{"columnName": [[{"id":"woodName"},{"id":"woodName"}, ...]]},{"columnName": [[{"id":"woodName"},{"id":"woodName"}, ...]]},...],...}

【问题讨论】:

  • ["id":"woodName","id":"woodName", ...] 不可能。数组/对象不包含重复键
  • 你永远不会以这种方式得到 json 响应。你不喜欢你得到的结果?
  • 我当然弄错了,谢谢B. Desai,我编辑了。
  • 我不喜欢我得到的结果,因为我正在创建一个带有一个 zoneName 块的应用程序,其中包含它的所有 columnName 包含它的所有 woodName,所以使用这个 json 我不能随意嵌套

标签: javascript php sql angularjs json


【解决方案1】:

我终于成功了,但不是以我想要的方式......然后我不想解决这个问题,因为我直接根据我的请求制作了自己的 Json。我仍然想要一个解决方案的方式是使用 sql 请求,它将使用 php 函数 fetchAll() + json_encode() 直接返回我想要的 Json。

我做的代码(它有效):

$result = $conn->query("
    SELECT z.nom nomZone, c.nom nomColonne, p.nom nomPalette 
    FROM zones z
    JOIN colonnes c ON (c.ID_zone = z.ID)
    JOIN palettes p ON (p.ID_colonne = c.ID)
    ORDER BY nomZone, nomColonne, nomPalette
    ");

$outp = "";
while($rs = $result->fetch_array(MYSQLI_ASSOC)) {
    if ($rs["nomColonne"] != $colonnePrecedente && $rs["nomZone"] == $zonePrecedente && $colonnePrecedente != NULL)
    {
        $outp .= ']]},';
    }
    elseif ($rs["nomColonne"] != $colonnePrecedente && $colonnePrecedente != NULL)
    {
        $outp .= ']]}';
    }
    if ($rs["nomZone"] != $zonePrecedente && $zonePrecedente != NULL)
    {
        $outp .= "],";
    }
    if ($rs["nomZone"] != $zonePrecedente)
    {    
        $outp .= '"'                           . $rs["nomZone"]           . '":[';
    }
    if ($rs["nomColonne"] != $colonnePrecedente)
    {
        $outp .= "".'{"type":"container","id":"'  . $rs["nomColonne"]        . '","columns":[[';
    }
    $outp .= "".'{"type":"item","id":"'     . $rs["nomPalette"]        . '"}';
    if ($rs["nomColonne"] != $colonnePrecedente)
    {
        $outp .= ",";
    }


    $zonePrecedente = $rs["nomZone"];
    $colonnePrecedente = $rs["nomColonne"];
    $palettePrecedente = $rs["nomPalette"];
}
$outp ='{'.$outp.']]}]}';
$conn->close();

我知道我的代码不干净,但我没有足够的编程经验。

$outp 的结果:

{"A1":[{"type":"container","id":"C1","columns":[[{"type":"item","id":"10-27-050-03_17"},{"type":"item","id":"10-28-050-03_17"}]]},{"type":"container","id":"C2","columns":[[{"type":"item","id":"20-23-050-03_17"},{"type":"item","id":"20-23-050-03_18"}]]}],"A2":[{"type":"container","id":"C1","columns":[[{"type":"item","id":"30-27-052-03_17"},{"type":"item","id":"30-27-052-03_17"}]]},{"type":"container","id":"C2","columns":[[{"type":"item","id":"40-27-050-03_17"},{"type":"item","id":"40-28-050-03_17"}]]},{"type":"container","id":"C3","columns":[[{"type":"item","id":"50-27-050-03_17"},{"type":"item","id":"50-28-050-03_17"}]]}],"A3":[{"type":"container","id":"C1","columns":[[{"type":"item","id":"60-27-050-03_17"},{"type":"item","id":"60-27-050-03_17"}]]},{"type":"container","id":"C2","columns":[[{"type":"item","id":"70-27-050-03_17"},{"type":"item","id":"70-27-050-03_17"}]]}],"A4":[{"type":"container","id":"C1","columns":[[{"type":"item","id":"80-27-050-03_17"},{"type":"item","id":"80-28-050-03_17"}]]},{"type":"container","id":"C2","columns":[[{"type":"item","id":"90-27-040-03_17"},{"type":"item","id":"90-27-050-03_17"}]]}]}

即使我得到了我想要的输出,我仍在寻找解决方案,因为现在我很难操作我的数据库。

祝你有美好的一天

【讨论】:

  • 还在等待解决方案,有人吗?
猜你喜欢
  • 1970-01-01
  • 2016-11-06
  • 2020-12-09
  • 2018-11-04
  • 2020-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-16
相关资源
最近更新 更多