我期望我的jQuery代码使用此JSON:
{
"projects": [
{
"id": "1",
"project_name": "Carmichael House",
"parent_id": "0",
"children": [
{
"id": "2",
"project_name": "Carmichael Kitchen",
"parent_id": "1"
},
{
"id": "3",
"project_name": "Carmichael Bathroom",
"parent_id": "1"
}
]
},
{
"id": "2",
"project_name": "Dowd Apartment",
"parent_id": "0",
"children": [
{
"id": "4",
"project_name": "Dowd Kitchen",
"parent_id": "2"
}
]
}
]
}
这些数据将来自MySql表 tbl_projects
:
id
project_name
parent_id
SQLSELECT
查询应该是什么,以便输出 1个平面表 ,可以很容易地将其转换为JSON(在PHP或JavaScript / jQuery中)?
我什至以正确的方式走这条路吗?
您可以直接从MySQL生成JSON内容。这是可与MySQL 5.7或更高版本一起使用的解决方案。
首先,coonsider函数JSON_OBJECT()
,该函数为表中的每个记录生成一个JSON对象:
SELECT
p.*,
JSON_OBJECT('id', id, 'project_name', project_name, 'parent_id', parent_id) js
FROM tbl_projects p;
给定您的样本数据,将返回:
| id | project_name | parent_id | js |
| --- | ------------------- | --------- | ---------------------------------------------------------------- |
| 1 | Carmichael House | 0 | {"id": 1, "parent_id": 0, "project_name": "Carmichael House"} |
| 2 | Carmichael Kitchen | 1 | {"id": 2, "parent_id": 1, "project_name": "Carmichael Kitchen"} |
| 3 | Carmichael Bathroom | 1 | {"id": 3, "parent_id": 1, "project_name": "Carmichael Bathroom"} |
| 4 | Dowd Apartment | 0 | {"id": 4, "parent_id": 0, "project_name": "Dowd Apartment"} |
| 5 | Dowd Kitchen | 4 | {"id": 5, "parent_id": 4, "project_name": "Dowd Kitchen"} |
为了生成您的预期输出,我们将对JOIN
表进行自我查找以找到子记录,并使用聚合函数JSON_ARRAYAGG()
生成内部JSON数组。聚合的附加级别将所有内容填充到单个对象中。如您的样本数据所示,我假设根项目具有parent_id = 0
并且只有一个层次结构:
SELECT JSON_OBJECT('projects', JSON_ARRAYAGG(js)) results
FROM (
SELECT JSON_OBJECT(
'id', p.id,
'project_name', p.project_name,
'parent_id', p.parent_id,
'children', JSON_ARRAYAGG(
JSON_OBJECT(
'id', p1.id,
'project_name', p1.project_name,
'parent_id', p1.parent_id
)
)
) js
FROM tbl_projects p
LEFT JOIN tbl_projects p1 ON p.id = p1.parent_id
WHERE p.parent_id = 0
GROUP BY p.id, p.project_name, p.parent_id
) x
产量:
| results |
| -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| {"projects": [{"id": 1, "children": [{"id": 2, "parent_id": 1, "project_name": "Carmichael Kitchen"}, {"id": 3, "parent_id": 1, "project_name": "Carmichael Bathroom"}], "parent_id": 0, "project_name": "Carmichael House"}, {"id": 4, "children": [{"id": 5, "parent_id": 4, "project_name": "Dowd Kitchen"}], "parent_id": 0, "project_name": "Dowd Apartment"}]} |
DB Fiddle上的演示
本文向大家介绍MongoDB查询以获取特定数量的项目,包括了MongoDB查询以获取特定数量的项目的使用技巧和注意事项,需要的朋友参考一下 要获取特定数量的项目,请在MongoDB中使用$slice运算符。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是仅获取2个项目的查询- 这将产生以下输出-
问题内容: 有一个像这样的json: 如何在不迭代所有json的情况下找到all 的值? PS:可以在json中的任何位置。 如果没有方法可以做到这一点,您能告诉我如何遍历json吗? 问题答案: 我对这个问题的处理方式会有所不同。 由于JSON不允许深度优先搜索,因此将json转换为Python对象,将其提供给XML解码器,然后提取要搜索的Node
本文向大家介绍sharepoint 通过CAML查询获取列表项,包括了sharepoint 通过CAML查询获取列表项的使用技巧和注意事项,需要的朋友参考一下 示例 基本范例 使用对象的set_viewXml方法SP.CamlQuery指定CAML查询以检索项目。 分页CAML查询的结果 您可以利用RowLimitCAML查询中的元素在每个查询中仅检索结果的子集。 使用get_listItemCo
我在代码中使用条件查询。它总是激发 相反,我想忽略查询中的一列(字段),因为该字段以字节形式存储了大量数据。导致性能问题。 有谁能给出一个主意吗? 一些更新 我在查询中添加了一个投影,它创建了一个类似... 现在问题就像..中的未知列“y4_”以及y8_和y5_的相同错误意味着关闭它给出错误的所有内容。 我把它修改成像... 而且奏效了。但是不知道在HQL里面怎么修改?
我正在尝试从特定目录中的google工作表列表(大约570个工作表)中删除多余的行和列(已知范围)。 我能够使用google drive API获取电子表格Id。但是,修改页面的尺寸需要图纸Id。 我无法找到通过驱动器API(文件属性)检索此工作表ID的方法,也无法找到任何关于如何在电子表格中列出可用工作表的留档,因为我有电子表格ID。 我尝试使用谷歌应用程序脚本来达到我的目标,但运行时间已经超过
问题内容: 我在代码中使用了条件查询。它总是会开火 相反,我想忽略查询中的一列(字段),因为该字段以字节为单位存储大量数据。这会导致性能问题。 有人可以对此提出想法吗? 一些更新 我在查询中添加了一个投影,它创建了一个查询,例如… 现在的问题就像.. 和y8_的相同错误,y5_表示所有接近它给出错误的地方。 我将其修改为Query … 而且有效。但是我不知道如何在HQL中对其进行修改? 问题答案: