一個(gè)DISTINCT解決一個(gè)重復(fù)問題

20190604
記錄一個(gè)簡(jiǎn)單方法解決一個(gè)看似很復(fù)雜的問題

本人在項(xiàng)目中遇到一個(gè)問題,就是一個(gè)用戶允許有多個(gè)角色,而角色和資源是多堆多關(guān)系,這就出現(xiàn)了一個(gè)情況就是,如果我選擇角色A,B,C,而A對(duì)應(yīng)的資源是{1,3,4,5}, B對(duì)應(yīng)的是{2,3,4}, C對(duì)應(yīng)的是{1,2,3,4},這樣就會(huì)出現(xiàn)如果我一個(gè)用戶有A,B,C三種角色,那么菜單就會(huì)出現(xiàn)下面這中情況,也就是,會(huì)出現(xiàn){1,1,2,2,3,3,3,4,4,4,5}

Jietu20190604-003349@2x.jpg

原先的思路是對(duì)于所有資源取集合,在后端做一個(gè)set,但是由于角色和資源是多對(duì)多,本身就有個(gè)中間表,如果你取資源的集合,那么如何管理其角色和資源那張表?,比如上面的情況,我取集合,那么對(duì)我用戶L,有角色A,B,C, 取集合是{1, 2, 3, 4, 5},那么這個(gè)資源對(duì)應(yīng)的是哪個(gè)角色,不知道,沒有這個(gè)角色,難道還要?jiǎng)?chuàng)建新的角色?這樣如果我刪掉A角色,那么就會(huì)變成{1,2,3,4},又要新建一個(gè)角色?

這樣下去需要判斷的復(fù)雜度就會(huì)越來越高。
沒有必要,我最后發(fā)現(xiàn)在SQL的語句中插入DISTINCT這樣就解決了,當(dāng)你在取菜單的時(shí)候,肯定會(huì)執(zhí)行SQL語句,那么對(duì)結(jié)果取DINSTINCT,那么出現(xiàn)的資源一定是沒有重復(fù)的,而且,我們不必去關(guān)心是哪個(gè)角色決定哪個(gè)資源,即便是角色A刪除了,也對(duì)結(jié)果沒有影響,一個(gè)單詞,解決了一個(gè)貌似復(fù)雜的問題,而且呢,避免其后續(xù)維護(hù)帶來的問題。

下面是結(jié)果:


Jietu20190604-004749@2x.jpg
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 專業(yè)考題類型管理運(yùn)行工作負(fù)責(zé)人一般作業(yè)考題內(nèi)容選項(xiàng)A選項(xiàng)B選項(xiàng)C選項(xiàng)D選項(xiàng)E選項(xiàng)F正確答案 變電單選GYSZ本規(guī)程...
    小白兔去釣魚閱讀 10,583評(píng)論 0 13
  • 數(shù)據(jù)結(jié)構(gòu)與算法 1.算法的有窮性是指( )。答案:A A)算法程序的運(yùn)行時(shí)間是有限的 B)算法程序所處理的數(shù)據(jù)量是...
    織夢(mèng)學(xué)生閱讀 3,697評(píng)論 1 15
  • 1.埋點(diǎn)是做什么的 2.如何進(jìn)行埋點(diǎn) 3.埋點(diǎn)方案的設(shè)計(jì) 近期常被問到這個(gè)問題,我擔(dān)心我的答案會(huì)將一些天真爛漫的孩...
    lxg閱讀 2,355評(píng)論 0 1
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,672評(píng)論 1 32
  • 選擇題部分 1.()部門負(fù)責(zé)日常監(jiān)督檢查工作,安全巡視的同時(shí)進(jìn)行消防檢查,推動(dòng)消防安全制度的貫徹落實(shí)。 A: 消防...
    skystarwuwei閱讀 15,946評(píng)論 0 3

友情鏈接更多精彩內(nèi)容