我有一个旧的 MySQL 表结构,我想升级到新的表结构,我将在下面解释该结构。
它是一个权限系统,该表表示什么级别的ID获得什么权限ID的
表[旧]:
permission_id
所授予权限的 ID
rank
获得权限的rank id
现在,对于旧的表系统,它使用对 permissions
表的额外调用来查找与 permission_id
链接的权限的名称,在我的新系统中,我只是按权限名称而不是权限 ID 存储权限。
表[新]:
permission_name
授予权限的名称
allowed_ranks
排名 ID 字符串,由 ,
如何将所有记录转换为所有权限的 1 个简单记录,但将 rank
列转换为新的 allowed_ranks
(分隔符为 ,)?
最佳答案
如果有任何选择,请不要转换到新系统。 您只需加入表就可以避免“额外的权限调用”。
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
;
注意:您可以使用第二个查询来填充新表,但几乎可以保证您很快就会后悔转向它;至少,一旦您必须找到与特定级别相关的所有权限。
关于php - 将 MySQL 转换为新系统?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47659374/