我试图在形容词列表中选择“父”和“祖父母”节点,但是不知道如何通过select查询(im初学者mysql程序员)来构建。
我试图建立一个订单系统,每个分销商可以看到他们在一个月内赚了多少钱。我从客户那里得到订单,客户经销商从订单中获得佣金,而分销商“父”分销商也得到少量佣金。
我的表是这样的(刚刚写了重要的列):
Table: order
-----------------------------
order_id | customer_id
-----------------------------
1 | 1007
2 | 1004
3 | 1001
4 | 1005
5 | 1009
Table: customers
------------------------------
customer_id | distributor_id <-- distributor_id is just like parent_id
------------------------------ (customers can also be distributors)
1001 | 0
1002 | 0
1003 | 0
1004 | 1001
1005 | 1004
1006 | 1002
1007 | 1001
1008 | 1005
1009 | 1004对于order_id 5,customer 1009,(父)分发服务器是1004。1004的(祖父母)分销商是1001。distributor_id值为0只意味着没有父分发服务器。
我想做的是在一页上显示1001获得佣金的所有订单(客户的父母和祖父母)。我只能选择父母,当爷爷奶奶在深水里游泳的时候,帮我!)
编辑:我可能已经用这个解决了它(不知道它是否讨厌):
SELECT c.*, o.*
FROM customers c
LEFT JOIN orders o ON c.customer_id = o.customer_id
LEFT JOIN customers p ON p.customer_id = c.distributor_id
WHERE c.distributor_id = 1001 OR p.distributor_id = 1001发布于 2013-09-24 02:22:29
简单的答案是,您需要执行几个查询,每个级别一个查询,因为您遵循父ids。当你失去父母的时候你就会停下来。
这种针对层次结构的设计是逻辑的、显而易见的,通常不适合于关系数据库。问题是,您根本无法执行一个SQL查询来获取记录和它的所有父级。为了得到一张唱片和它的父母,你可以做一个自我连接,做第三个层次,你可以做第二个自我连接,但是你怎么一直坚持到你的父母都没有了?您不能这样做,SQL没有这样的动态连接机制。因此,这个结构的解决方案是进行多个查询。对于非常小的树木,没有一个巨大的性能损失。
如果您想重新设计您的表,以便您可以使用单个查询进行操作,则需要使用名为嵌套集的结构。
(编辑:实际上,我刚刚发现了一个名为“公共表表达式”的SQL扩展,它是为分层数据设计的。不幸的是,MySQL不支持它。)
https://stackoverflow.com/questions/18971823
复制相似问题