通過mysql做乙個家族關係的表(id,pid,name),通過乙個id怎麼判斷是否某個節點的子節點?

時間 2021-06-22 02:36:00

1樓:Kaciras

如果你的表一定要是(id,pid,name)這種結構,那只能遞迴。

如果你可以自定義表結構那還有以下選擇:

如果只有判斷後代這乙個需求,那就使用並查集。

如果還有其它查詢需求,比如查x是y的第幾代啊、x到y之間的所有節點啊,可以參考我做過的乙個類似的功能 在資料庫中儲存一棵樹,實現無限級分類, 把裡面的分類換成你的家族成員。

2樓:Cakie

想到的簡單的,可以把族譜做成表,每個家族的族譜樹結構變成JSON單獨儲存,每次查詢的時候把樹格式讀取出來還原成樹結構,然後查。

直接通過資料庫查這種關係,如果父子離得遠會比較麻煩

3樓:newbie Go

這就是個樹的資料結構

看看樹的一些演算法直接抄過來就行了

如果代數沒有限制,用程式去處理比較合適

如果代數有限制比如最多隻查10級的(父)子節點,那也可以簡單的在表裡用10個字段來來記錄每個節點的上10級pid,給這10個字段建立組合索引,然後一條簡單的一條語句就搞定,又簡單效能也很好。

SQL查詢是可以實現遞迴或迭代查詢的,但是既不好維護效率也不好,盡可能不要這麼幹。

4樓:galaxyyao

按普通邏輯就是迴圈或遞迴查詢,直到找到或到了pid為null的根節點。

簡單的方法是加個path欄位,存放root.id1.id2.

x.id3.y之類,然後用like判斷。

如果不能改動原表,也可以單獨建立一張表或者物化檢視來存放,通過定時任務或觸發器更新。

Mysql我通過程式來生成乙個UUID,做主鍵可行嗎?

水巷先生 問題一分為二 Q1 MySQL我通過程式來生成乙個UUID,做主鍵可行嗎?當然,完全沒有任何問題,你完全可以這麼幹!這裡需要注意的別的問題,比如 要通過程式約束,保證唯一性。不過程式幹的事情多了,效能損耗多少都是會有的。Q2 是否有必要設定乙個無實際意義的自增ID做主鍵?當然,完全是有必要...

如何在家族企業中做乙個合格的管理者?

江山打下來了,如何守住江山?家族企業的管理者就是乙個守江山的過程,你永遠記住你只是乙個過程,不是開創者,更不是終結者,所以如何維護這個過程就是你最大的課題。我所見過的很多家族企業都死於內鬥,家族人士佔據了幾乎所有關鍵的職位,不管開什麼會,都會演變成一場家族內部的吵架大戰,最後七大姑八大姨的出來勸架,...

做乙個課代表怎麼和同學搞好關係?

因為風在這裡 初中時,我也擔任過生物課代表。我的做法很簡單,做好最為課代表的本職,適當的向老師反應班級的情況 要含蓄,千萬不要指名帶姓 生物作為小科,肯定得不到大部分同學的重視,身為課代表,我一般都是帶著調侃的語氣委婉提醒同學們的。有時,盡心盡責反而會招來些蠻煩。真的,有時要稍微隨機應變,要稍微 靈...