在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

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

mysql多表查詢的問(wèn)題

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

如何將規(guī)則部分顯示rule的名稱
sql查詢?cè)撛趺磳憽?/p>

回答
編輯回答
絯孑氣

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

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

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 表名應(yīng)該用 ` 符號(hào)。

假設(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