我试图选择一个adjecency列表中的“父”和“祖父母”节点,但不知道如何通过SELECT查询(即im初学者mysql程序员)建立线索。MySQL select parent and grandparent
我试图做一个订单系统,其中每个分销商可以看到他们在一个月内赚了多少。我从客户处获得一份订单,并且客户分销商从订单中获得佣金,分销商“母公司”分销商也获得一笔小佣金。
我的表是像这样(只写了重要的列):
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,客户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
我怎么会写SELECT语句?我不需要父母一直到顶部,总是只有2级(父母和祖父母),所以它不必是动态的 – omegan
像在伪代码中,我只是想做的:选择所有订单在哪里父母或祖父母TO orders.customer_id IS 1001 – omegan
如果你总是只看到两层,那么你可以找到你想要的customer_id的父代,然后找到它的父代。然后你可以做'SELECT * FROM order WHERE order_id IN(,,)' –
staticsan