隨筆-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ù)庫里是怎么調用的。等我找到了,再貼出來與大家分享。
          這個程序,估計好多人看不明白,其實放了這么久我也一時沒看明白,重新測了一下,補充說明一下,不然我下次又看不懂了。
          以一個windows系統(tǒng)的菜單為例。我那一個這樣的表menu。
          說明:
          mid:菜單的ID號
          mname:菜單名稱
          mpid:菜單的
          quickey:快捷鍵
          validate:權限表(存放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;
          這樣就可以把 “文件”里的子菜單全部列出來了。當然實際應用不會這么簡單,如附加其實條件,尤其是權限管理,這時根據(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;
          )
          最后再補充一點關于隨機查詢的代碼
          select * from user order by sys_guid()
          posted on 2015-03-12 12:04 ForMeBlog 閱讀(1489) 評論(0)  編輯  收藏 所屬分類: 數(shù)據(jù)庫

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


          網站導航:
           
          主站蜘蛛池模板: 望谟县| 商洛市| 兴宁市| 贵定县| 天长市| 宣城市| 杨浦区| 城步| 盐源县| 民县| 陕西省| 名山县| 清徐县| 茶陵县| 阳信县| 通许县| 奇台县| 石屏县| 扶绥县| 绥芬河市| 桦南县| 临洮县| 麟游县| 长兴县| 山东| 应用必备| 体育| 西昌市| 南平市| 永胜县| 新民市| 崇信县| 凤阳县| 上林县| 柯坪县| 罗城| 富川| 吕梁市| 隆尧县| 铁岭市| 教育|