我的树结构如下:
我的结果基于一些外部联接:
从MySQL返回的线性数据集构建树结构的最佳方法是什么?
答案 0 :(得分:0)
与this question非常相似。
有三种基本选择和一种迂腐选择。
第一个选项:
SELECT * FROM Book b JOIN Chapters c USING (book_id) JOIN Sections s USING (chapter_id) ...
使用上述查询的结果,您可以通过读取列并遍历根对象轻松创建嵌套对象。这很简单,但数据库中重复数据的数量可能会导致性能问题,具体取决于您的使用情况。
第二个选项:
SELECT * FROM Book WHERE (your filters here);
使用查询结果,创建BookId的地图 - >书籍对象,例如
for (result : results) { books[result.book_id] = new Book(result); }
用它,再做一个查询:
SELECT * FROM Chapter WHERE book_id IN (book ids you collected earlier)
继续这样做,随时进行映射。 可以比第一个选项更快,更高效,但复杂代码的数量可能会使性能提升不再值得。
第三个选项:
使用ORM,例如Sequelize。它将使用我的第一个和第二个选项的一些有效组合。大概。但作为用户,它会将痛苦从你身上抽走。
迂腐选项:
根据您的使用情况,MySQL可能不适合托管此类数据。您需要多久返回一个完整的Book对象,而不是现在用户需要的部分?您是否经常根据图像过滤书籍?也许像MongoDB这样的基于JSON的商店可能会有所帮助,或者您可以将章节,组件和图像存储在Chapters表的单个BLOB列中。同样,它在很大程度上取决于您的用例。