dtx3006 2015-10-06 02:03
浏览 30
已采纳

嵌套在MySQL(PHP)中的JSON

Database table articles holds parent articles and articles variants. Variant articles have empty NAME fields, their PARENTID is related to the parents id. Not every article has variants.

parent articles:    ID, NAME   
variant articles:   ID, PARENTID, VARIANT

How can ι get a JSON like this? Only articles with child articles

{
  "ID": "dfe17b",
  "NAME": "this is a very good movie",
  "variants": [
    {
      "ID": "6bcb7",
      "VARIANT": "DVD",
    },
    {
      "ID": "75a9b",
      "VARIANT": "Blu-ray",
    },
    {
      "ID": "fe3b3",
      "VARIANT": "VHS",
    }
  ]
},
{
  "ID": "dfe156",
  "NAME": "this is a pretty nice movie",
  "variants": [
    {
      "ID": "5j4h7",
      "VARIANT": "online",
    },
    {
      "ID": "95c9s",
      "VARIANT": "Blu-ray",
    }
  ]
}

SQL:

SELECT o.ID, o.PARENTID, IFNULL(oa.TITLE, o.TITLE) AS TITLE,     o.VARNAME,       o.VARSELECT
FROM articles o
  LEFT JOIN articles oa
    ON oa.ID = o.PARENTID
WHERE o.VARNAME IS NOT NULL
ORDER BY TITLE ASC

gives

{
  "ID": "dfe17b",
  "NAME": "this is a very good movie",
  "VARIANT": "",
  ...
},
{
 "ID": "6bcb7",
  "NAME": "this is a very good movie",
  "VARIANT": "DVD",
   ...
},
{
"ID": "75a9b",
"NAME": "this is a very good movie",
"VARIANT": "Blu-ray",
...
},
{
"ID": "fe3b3",
"NAME": "this is a very good movie",   
"VARIANT": "VHS",
...
},
{
  "ID": "dfe156",
  "NAME": "this is a pretty nice movie",
  "VARIANT": "",
  ...
  },
  {
  "ID": "5j4h7",
  "NAME": "this is a pretty nice movie",
  "VARIANT": "online",
  ...
  },
  {
  "ID": "95c9s",
  "NAME": "this is a pretty nice movie",
  "VARIANT": "Blu-ray",
   ...
   }
  • 写回答

1条回答 默认 最新

  • dougu5886 2015-10-07 20:24
    关注
    $parents = array();
    $sql = "SELECT ID, NAME FROM articles
    WHERE NAME!='' AND PARENTID=''
    ORDER BY NAME"; 
    $res = $db->db_query($sql);
    while ($row=$db->db_fetch_assoc($res)){
    $row['variants'] = array();
    $parents[$row['ID']] = $row;
    }
    
    # variants
    $sql = "SELECT ID,PARENTID,VARIANT FROM articles
    WHERE PARENTID!=''
    ORDER BY NAME"; 
    $res = $db->db_query($sql);
    while ($row=$db->db_fetch_assoc($res)){
    $parents[$row['PARENTID']]['variant'][] = $row;
    }
    
    header('Content-Type: application/json');
    echo json_encode(array_values($parents));
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 ubuntu子系统密码忘记
  • ¥15 信号傅里叶变换在matlab上遇到的小问题请求帮助
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 matlab求解平差
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料
  • ¥15 使用R语言marginaleffects包进行边际效应图绘制
  • ¥20 usb设备兼容性问题
  • ¥15 错误(10048): “调用exui内部功能”库命令的参数“参数4”不能接受空数据。怎么解决啊
  • ¥15 安装svn网络有问题怎么办