以上下層級部門來說,方法一:使用mysql的FIND_INSET函式。每個部門儲存所有上級部門的ID,如1,3,9,13,21。當部門資訊變化時,改變這個path的值。這樣查詢上下級都很方便。但是資料量大時FIND_IN_SET效率不高。方法二:建一個父子關係表,欄位有grade,dptId,parentId。,每個部門建立時,記錄這個部門多個上級部門和級別。這樣查詢上下級時只要按grade排序就很方便。方法三:這個方法先確定有幾個層級。比如有3個層級,每個層級最多9個專案,在部門表裡建二個欄位grade,sorts排序,第一層就是100\200\...\900,100下有110\120...,110下有111\112...。這樣查詢100的下級使用100<x<200就行了。查詢上級不是很方便,如查詢234的上級200\230,可使用 234>x and (234-x)<y 其中y=(本層grade-父grade)*10查出。200\230。
以上下層級部門來說,方法一:使用mysql的FIND_INSET函式。每個部門儲存所有上級部門的ID,如1,3,9,13,21。當部門資訊變化時,改變這個path的值。這樣查詢上下級都很方便。但是資料量大時FIND_IN_SET效率不高。方法二:建一個父子關係表,欄位有grade,dptId,parentId。,每個部門建立時,記錄這個部門多個上級部門和級別。這樣查詢上下級時只要按grade排序就很方便。方法三:這個方法先確定有幾個層級。比如有3個層級,每個層級最多9個專案,在部門表裡建二個欄位grade,sorts排序,第一層就是100\200\...\900,100下有110\120...,110下有111\112...。這樣查詢100的下級使用100<x<200就行了。查詢上級不是很方便,如查詢234的上級200\230,可使用 234>x and (234-x)<y 其中y=(本層grade-父grade)*10查出。200\230。
方法二、三都要用到group_concat。資料量大時可能方法二效率最高。拋磚引玉,有啥想法請不吝賜教!