隨筆-23  評論-0  文章-5  trackbacks-0
          在ORACLE 數(shù)據(jù)庫中有一種方法可以實現(xiàn)級聯(lián)查詢
          select *                //要查詢的字段
          from table              //具有子接點ID與父接點ID的表 
          start with selfid=id      //給定一個startid(字段名為子接點ID,及開始的ID號)
          connect by prior selfid=parentid       //聯(lián)接條件為子接點等于父接點,不能反

          這個SQL主要用于菜單的級聯(lián)查詢,給一個父接點可以查出所有的子接點。及子接點的子接點,一查到底,很實用。不過呢這個程序只能在oracle里面用,我目前還不知道在其它數(shù)據(jù)庫里是怎么調(diào)用的。等我找到了,再貼出來與大家分享。
          這個程序,估計好多人看不明白,其實放了這么久我也一時沒看明白,重新測了一下,補充說明一下,不然我下次又看不懂了。
          以一個windows系統(tǒng)的菜單為例。我那一個這樣的表menu。
          說明:
          mid:菜單的ID號
          mname:菜單名稱
          mpid:菜單的
          quickey:快捷鍵
          validate:權(quán)限表(存放userid,或者角色id)
          mid mname mpid quickey validate                                                                  
          1 文件   ctrl+f 1,2,3,4,11,23,45
          2 編輯   ctrl+e  
          3 新建 1 alt+w  
          4 文件夾 3  

           

          如果我想知道在“文件”菜單下有那些子菜單的話。我就可以這樣用這個SQL程序:
          select * from menu
          start with mid=1     
          connect by prior mid=mpid;
          這樣就可以把 “文件”里的子菜單全部列出來了。當然實際應(yīng)用不會這么簡單,如附加其實條件,尤其是權(quán)限管理,這時根據(jù)你的系統(tǒng)要求,是對個個驗證,還是對角色驗證,把這些人的ID放在validate這個字段里,組成一個字符串,N個ID用逗號隔開,(注意,在往數(shù)據(jù)庫保存時要注意對字符串處理一下,截取掉最后一個逗號這樣可以節(jié)省很多麻煩)
          select * from menu
          where validate in(……)
          and mid in(
             select mid from menu  //這里不能用*號了。
             start with mid=1     
             connect by prior mid=mpid;
          )
          最后再補充一點關(guān)于隨機查詢的代碼
          select * from user order by sys_guid()
          posted on 2015-03-12 12:04 ForMeBlog 閱讀(1489) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導航:
           
          主站蜘蛛池模板: 达州市| 玉溪市| 岗巴县| 商都县| 镇康县| 屏东县| 嘉峪关市| 吉首市| 涪陵区| 曲松县| 西宁市| 疏附县| 启东市| 贵溪市| 德格县| 南乐县| 武汉市| 泗洪县| 龙岩市| 韶山市| 德州市| 定远县| 会昌县| 太谷县| 普定县| 中牟县| 永济市| 什邡市| 宁都县| 得荣县| 东港市| 封开县| 荃湾区| 池州市| 弥勒县| 蓬安县| 乳源| 汪清县| 栖霞市| 利川市| 金溪县|