将MySQL转换为新系统?

时间:2017-12-05 17:29:15

标签: php mysql database

我有一个旧的MySQL表结构,我想升级到一个新结构,我将解释下面的结构。

它是一个权限系统,该表代表了哪个等级ID获得了什么权限ID

表[旧]:
permission_id给出的许可的身份
rank获得许可的等级ID

现在,对于旧表系统,它使用对permissions表的额外调用来查找与permission_id链接的权限的名称,在我的新系统中,我只是通过权限存储权限&# 39; s名称不是权限ID。

表[新]:
permission_name给出的许可的名称
allowed_ranks一串排名ID,由,

分隔

如何将所有权限的所有记录转换为1条简单记录,但将rank列转换为新的allowed_ranks,并将其分隔为?

1 个答案:

答案 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
;

注意:您可以使用第二个查询来填充新表,但几乎可以保证您很快会后悔移动它;至少,一旦你必须找到与特定排名相关的所有权限。