鍍金池/ 問答/數(shù)據(jù)庫  網(wǎng)絡(luò)安全/ mysql多表查詢的問題

mysql多表查詢的問題

在做權(quán)限管理的系統(tǒng)時:
group表中有一個rules字段(varchar),記錄著組的規(guī)則id。 該id對應著rule表中的id。數(shù)據(jù)庫用的mysql
圖片描述

如何將規(guī)則部分顯示rule的名稱
sql查詢該怎么寫。

回答
編輯回答
絯孑氣

個人理解如果數(shù)據(jù)庫是這么設(shè)計的話,初衷是讓在應用程序中處理:按照逗號分隔,逐條查詢rule表,更常規(guī)的做法是用一個用戶和規(guī)則的關(guān)聯(lián)表。

如果非要用sql做關(guān)聯(lián)查詢,可以用FIND_IN_SET,不過效率不會太高。

select *
from 
(select '1,2,3,4,5' ids) t1 inner join (select 1 id, '張三' name union select 2, '李四') t2 
on FIND_IN_SET(t2.id, t1.ids) > 0
2018年7月27日 02:24
編輯回答
熟稔

注意 group 表名應該用 ` 符號。

假設(shè)表 group 是這樣的

name rules
guest 1,2
user 1,2,5

而表 rule 是這樣的

id name
1 r1
2 r2
5 r5

那么下面 SQL

SELECT group_name, GROUP_CONCAT(rule_name ORDER BY rule_id) AS rule_names FROM (
    SELECT `group`.name as group_name, rule.name AS rule_name, rule.id AS rule_id
        FROM `group` LEFT JOIN rule
        ON find_in_set(rule.id, `group`.rules)
) AS t GROUP BY group_name;

的結(jié)果是

group_name rule_names
guest r1,r2
user r1,r2,r5
2017年11月10日 13:44
編輯回答
維他命
SELECT GROUP_CONCAT(rule.rule_name) FROM `group` LEFT JOIN rule ON FIND_IN_SET(rule.id, `group`.rules)
2018年3月26日 08:05