【发布时间】:2015-02-10 06:13:15
【问题描述】:
首先,我想说我已经做了一些研究,但我仍然无法对我的问题得到明确的答案。请随时给我链接到我可能错过的地方。
我一直在使用一个简单的.json 文件(手写),其中包含我网站的所有数据。这由 JQuery 解析,然后从中构建整个页面(请参阅my personnal webpage)。出于多种原因(易于编辑,即使 javascript 被阻止也有一个工作网页)我想构建它的 PHP/MySQL 版本。
我的问题是将我的 .json 文件的树结构转换为单个 SQL 查询。
我的数据库有 pages、articles 和 citations 的表,每个表都有一个 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,但这只给了我第一个孩子。
【问题讨论】:
-
您可能需要提供样本数据和预期结果。
-
我添加了一些示例数据。至于预期的结果,我不知道它们应该如何(这就是我的问题的重点)
-
现在考虑到这些数据,请解释为什么您的查询不能满足您的需求以及您希望得到什么。
-
在这种情况下,我对同一篇文章有 2 次引用,每次引用我得到 1 行,并填充了所有文章/页面元素。这听起来像是重复了很多数据,只有一次就足够了。因此,我问是否有办法获得更“树状”的答案,可以消除一些重复的数据
-
看看
GROUP_CONCAT。只要您不介意将其作为字符串取回,它就可以展平您的数据。
标签: mysql sql join tree grouping