我有一个旧的MySQL表结构,我想升级到一个新结构,我将解释下面的结构。
它是一个权限系统,该表代表了哪个等级ID获得了什么权限ID
表[旧]:
permission_id
给出的许可的身份
rank
获得许可的等级ID
现在,对于旧表系统,它使用对permissions
表的额外调用来查找与permission_id
链接的权限的名称,在我的新系统中,我只是通过权限存储权限&# 39; s名称不是权限ID。
表[新]:
permission_name
给出的许可的名称
allowed_ranks
一串排名ID,由,
如何将所有权限的所有记录转换为1条简单记录,但将rank
列转换为新的allowed_ranks
,并将其分隔为?
答案 0 :(得分:1)
如果您有任何选择,请勿转换为新系统。 您只需加入表格即可避免“额外调用权限”。
SELECT *
FROM old_table AS t
INNER JOIN permissions AS p ON t.permission_id = p.permission_id
WHERE t.rank = ?
;
如果您需要显示新表格格式的信息,请使用此查询:
SELECT p.permission_name, GROUP_CONCAT(t.rank) AS allowed_ranks
FROM old_table AS t
INNER JOIN permissions AS p ON t.permission_id = p.permission_id
GROUP BY p.permission_name
;
注意:您可以使用第二个查询来填充新表,但几乎可以保证您很快会后悔移动它;至少,一旦你必须找到与特定排名相关的所有权限。