Mysql 多重连接来描绘我的类别的表布局
我试图描绘一个类别列表,子目录和子目录等等。
Root Sub Level 1 Personal income Adelaide IT Solutions (AITS) Personal income DJ Personal income Ebay Sales Personal income IAG Rental income Cash Grove Pasadena Rental income Winston Ave Cumberland Park Personal income Misc Income
我编写了以下返回结果的 SQL 语句,但仅当它与联接匹配时才有效,例如,如果我有一个深度为 3 层的联接,则它只会列出具有该深度类别的类别。
我假设我必须使用嵌套选择或类似的东西,但不知道如何去做。
SELECT
c.name as 'Root',
s.name as 'Sub Level 1',
s2.name as 'Sub Level 2',
s3.name as 'Sub Level 3'
FROM catergories c
INNER JOIN catergories s ON c.id = s.parent
INNER JOIN catergories s2 ON s.id = s2.parent
INNER JOIN catergories s3 ON s2.id = s3.parent
任何帮助将不胜感激。
I'm trying to portray a list of categories, the sub and sub and so on like this.
Root Sub Level 1 Personal income Adelaide IT Solutions (AITS) Personal income DJ Personal income Ebay Sales Personal income IAG Rental income Cash Grove Pasadena Rental income Winston Ave Cumberland Park Personal income Misc Income
I've written the following SQL statement which returns results, but only for when it matches the join, for example, if I have a join going 3 levels deep, it will only list the categories to which has a category that deep.
I'm assuming I have to use nested select's or something similar but have no idea how to go about it.
SELECT
c.name as 'Root',
s.name as 'Sub Level 1',
s2.name as 'Sub Level 2',
s3.name as 'Sub Level 3'
FROM catergories c
INNER JOIN catergories s ON c.id = s.parent
INNER JOIN catergories s2 ON s.id = s2.parent
INNER JOIN catergories s3 ON s2.id = s3.parent
Any help would be greatly appreciated.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
相当简单的非递归邻接列表存储过程实现,允许您从应用程序层对数据库进行一次调用并检索所需的层次结构。
显然用你的类别替换员工......
Fairly simple non recursive adjacency list stored procedure implementation which allows you to make a single call from your application layer to the DB and retrieve the required hierarchy.
Obviously replace employees with your categories...
假设最大深度为 3 层,最简单的实现是使用 LEFT JOIN 来显示 Root 列中的所有类别及其子类别(如果存在):
通过上面的查询,您将有许多重复项 -所有类别将显示为根,其中一些类别将再次显示为各个级别的子类别。要只有父母作为 root,我想你可以添加规则:
Assuming the maximum is 3 levels deep, the simplest implementation would be using a
LEFT JOIN
to show all categories in the Root column, and their subcategories if they exist:With the query above you will have many duplicates - ALL categories will show as Root, and some of them will show again as sub categories in various levels. To have only Parents as root, I guess you can add the rule: