我的数据库中有一些表以不同的方式在它们之间建立关系。现在我想用PHP创建嵌套数组,这样我的数组结构就像这样:
- Parent
- id: 1
- name: "ParentName1"
- children:
- child
- cid: 1
- name: "ChildName1"
- movies:
- Movie
- mid: 1
- name: "MovieName1"
- Movie
- mid: 2
- name: "MovieName2"
- child
- cid: 2
- name: "ChildName2"
- movies:
- Movie
- mid: 3
- name: "MovieName3"
- Movie
- mid: 1
- name: "MovieName1"
- Parent
- id: 2
- name: "ParentName2"
- children:
- child
- cid: 4
- name: "ChildName4"
- movies:
- Movie
- mid: 6
- name: "MovieName6"
- Movie
- mid: 7
- name: "MovieName7"
- child
- cid: 1
- name: "ChildName1"
- movies:
- Movie
- mid: 1
- name: "MovieName1"
- Movie
- mid: 2
- name: "MovieName2"
我创建了一个查询,它将所有子ID,名称和电影连接成用“,”分隔的单行。这适用于ids和名字,但对电影来说很棘手。
SELECT
parents.id AS parentId,
parents.name AS parentName,
GROUP_CONCAT(children.id) AS childrenIds,
GROUP_CONCAT(children.name) AS childrenNames,
GROUP_CONCAT(children.movies) AS childrenMovies
FROM
parents
LEFT JOIN relationTable ON
relationTable.pid = parent.id
LEFT JOIN children ON
children.id = relationTable.child.id
LEFT JOIN moviesRelatonTable ON
moviesRelatonTable.personId = children.id
GROUP BY
parents.id
我想我只能查询父母,然后在PHP中循环查看每个父母并获得孩子。但我觉得这对表现来说并不好。
有没有更好的方法可以查询,或者我应该使用PHP中的循环?
答案 0 :(得分:-1)
如果您始终从数据库中提取完整列表,则可以在处理一次后将json保存为文件。在每个请求检查文件保存日期和最后更新的数据库中,如果json文件是最新的,甚至不用把它全部拉出数据库,只需使用该文件。如果文件不是最新的,请从db创建它并再次保存。这将有助于解决性能问题,然后您不必太担心子查询性能。您需要使用函数file_exists
和filemtime
。