鍍金池/ 問(wèn)答/數(shù)據(jù)庫(kù)/ 如何使用mysql保存層級(jí)關(guān)系,例如多級(jí)代理

如何使用mysql保存層級(jí)關(guān)系,例如多級(jí)代理

現(xiàn)在設(shè)計(jì)一個(gè)用于營(yíng)銷系統(tǒng)的代理層級(jí)關(guān)系,一級(jí)代理開(kāi)設(shè)二級(jí)代理,二級(jí)代理開(kāi)設(shè)三級(jí)代理一直到10代,各級(jí)代理發(fā)展會(huì)員下單。需求是快速查出指定層級(jí)代理下所有會(huì)員(不管是不是直屬會(huì)員)下單總額。遞歸相當(dāng)?shù)睦速M(fèi)性能??!有不遞歸的方法嗎?

回答
編輯回答
尛曖昧

代理id,上級(jí)id,所屬層級(jí)

2017年9月25日 06:33
編輯回答
敢試

其實(shí)很簡(jiǎn)單的問(wèn)題,看系統(tǒng)設(shè)計(jì)了。如果代理是無(wú)限級(jí)的,并且真的可能會(huì)超過(guò)100+,那還是做緩存吧。如果不是只有幾級(jí)而已。
那就做冗余吧。

冗余:

用戶ID 代理記錄 other
1 NULL NULL
2 ,1, NULL
3 ,1,2, NULL

可以很簡(jiǎn)單的獲取我的下級(jí)都有誰(shuí)我的上級(jí)的代理鏈

--
mysql5.7 以后可以直接用數(shù)組或json處理數(shù)據(jù)

2017年7月9日 04:33
編輯回答
亮瞎她

目前采用的方式,是使用一個(gè)字段保存各級(jí)代理賬號(hào)拼接起來(lái)的字符串,例如/1dai/2dai/3dai/.../10dai/,不知道有沒(méi)有更好的方案?

2018年1月7日 23:15
編輯回答
尐潴豬

表字段:一級(jí)ID,二級(jí)ID.....十級(jí)ID,下單金額
每次插數(shù)據(jù)的時(shí)候,把當(dāng)前會(huì)員的所有上級(jí)ID都插進(jìn)去,之后你想查幾級(jí)ID就取對(duì)應(yīng)的列進(jìn)行求和。
比如你要查某個(gè)五級(jí)ID下總金額,那么就是:select sum(下單金額) from table where 五級(jí)ID='AAAAA' AND 六級(jí)ID IS NOT NULL

2017年9月15日 22:11