gpt4 book ai didi

mysql - SQL Join 分组以获得树状结果

转载 作者:行者123 更新时间:2023-11-29 23:02:32 28 4
gpt4 key购买 nike

首先,我想说我已经做了一些研究,但我仍然无法得到我的问题的明确答案。请随时向我提供我可能错过的地方的链接。

我长期以来一直使用一个简单的 .json 文件(手写),其中包含我网站的所有数据。这是由 JQuery 解析的,然后根据它构建整个页面(请参阅 my personnal webpage )。出于多种原因(易于编辑、即使 JavaScript 被阻止也能正常工作的网页),我想构建它的 PHP/MySQL 版本。

我的问题是将 .json 文件的树结构转换为单个 SQL 查询。

我的数据库有页面文章引文表,每个表都有一个ID和外键(到那里的父亲)在一对多模型中。

        Pages
----------------------
Page_ID | Page_Title
----------------------
0 | About
2 | Work
3 | Publication


Articles
------------------------------------
Article_ID | Page_ID | Article_Title
------------------------------------
0 | 0 | About me
1 | 3 | Articles


Citations
-----------------------------------------
Citation_ID | Article_ID | Citation_Title
-----------------------------------------
0 | 3 | My fst quote
1 | 3 | My snd quote

到目前为止,我已经构建了以下查询:

SELECT * FROM pages
LEFT OUTER JOIN articles
ON pages.Page_ID = articles.Page_ID
LEFT OUTER JOIN citations
ON articles.Article_ID = citations.Article_ID
ORDER BY pages.Page_Order IS NULL, pages.Page_Order ASC

但这让我得到了多个时间元素,其中有多个儿子/孙子。

有没有更好的方法来表示一棵树?我尝试查看 GROUP BY 但这只给了我第一个 child 。

最佳答案

如果您的目标是获取所有数据来构建树结构,那么没有比上面的查询更好的方法了。您不应该担心重复问题,因为无论如何您都必须解析数据,并且您想要立即从数据库加载所有数据这一事实表明您的数据库根本不大。只需按顺序添加 Article_id 和 itation_id 来扩展 order by 子句,即可使整个数据集正确排序,以便您可以直接遍历它并构建树。

也就是说,您可以通过发出多个查询来消除重复问题,首先获取所有页面,然后获取每个页面的所有文章,然后获取每篇文章的所有引用。然而,这可能会更慢,因为您将有大量的数据库往返。为了使这种解决方案有效,您必须调整用户界面以根据要求动态加载数据。例如,您仅显示页面列表,当用户单击单个页面时,将执行一个查询来获取该单个页面的文章。

关于mysql - SQL Join 分组以获得树状结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28425290/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com