我有一个segment表和segmentCode, Description, pst-active, ...。我也有一个带有subarea的表FK SegmentCode, deelgebiedID, Deelgebied, ...。现在,我想选择所有分段,也要选择分段的子区域。我理想的数组是

segments[[segmentCode, Description, ..., [array with subareas data]],[segmentCode, Description, ..., [array with subareas data]]]


如何在查询中执行此操作?我已经尝试过了,但是它只是给了我片段重复。

最佳答案

有两种方法可以实现此目的:

在包含所有必需信息的数据库上执行一个select语句,然后从中构建数组。该语句看起来像SELECT * FROM segment seg JOIN subarea sub ON seg.segmentCode = sub.SegmentCode ORDER BY seg.segmentCode, sub.deelgebiedID;。然后,您必须遍历结果,跟踪segmentCode并在segmentCode更改时创建一个新的segment对象。尽管它没有改变,但您只需将子区域添加到该对象(或创建一个数组)。

另一种方法是将过程分为几个选择。首先使用SELECT * FROM segment seg ORDER BY seg.segmentCode;获取细分。然后循环遍历检索到的段并为每个段获取子区域:SELECT * FROM subarea sub WHERE sub.SegmentCode = PARAMETER ORDER BY sub.deelgebiedID;

在您的情况下选择哪种方法是性能(通常一个数据库语句要好得多)与内存消耗和代码复杂度之间的权衡。

10-08 13:36