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

          這個SQL主要用于菜單的級聯查詢,給一個父接點可以查出所有的子接點。及子接點的子接點,一查到底,很實用。不過呢這個程序只能在oracle里面用,我目前還不知道在其它數據庫里是怎么調用的。等我找到了,再貼出來與大家分享。
          這個程序,估計好多人看不明白,其實放了這么久我也一時沒看明白,重新測了一下,補充說明一下,不然我下次又看不懂了。
          以一個windows系統的菜單為例。我那一個這樣的表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;
          這樣就可以把 “文件”里的子菜單全部列出來了。當然實際應用不會這么簡單,如附加其實條件,尤其是權限管理,這時根據你的系統要求,是對個個驗證,還是對角色驗證,把這些人的ID放在validate這個字段里,組成一個字符串,N個ID用逗號隔開,(注意,在往數據庫保存時要注意對字符串處理一下,截取掉最后一個逗號這樣可以節省很多麻煩)
          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 閱讀(1483) 評論(0)  編輯  收藏 所屬分類: 數據庫

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


          網站導航:
           
          主站蜘蛛池模板: 庆城县| 襄汾县| 新安县| 扶绥县| 城步| 微山县| 洛川县| 同江市| 乐至县| 合阳县| 姜堰市| 海宁市| 烟台市| 顺义区| 承德市| 方正县| 石门县| 宜章县| 建平县| 张家口市| 高淳县| 孝义市| 岳普湖县| 竹北市| 贺州市| 利津县| 同仁县| 龙州县| 广平县| 团风县| 乌兰浩特市| 灵丘县| 望城县| 都安| 扶沟县| 桃园县| 景宁| 镇巴县| 博客| 中西区| 抚宁县|