Php 将MySQL转换为新系统?

Php 将MySQL转换为新系统?,php,mysql,database,Php,Mysql,Database,我有一个旧的MySQL表结构,我想升级到一个新的,我将解释下面的结构 它是针对权限系统的,表表示什么列组id获得什么权限id 表[旧]: 权限\u id给定权限的id rank获取权限的列组id 现在,对于旧的表系统,它使用对权限表的额外调用来查找与权限\u id链接的权限的名称,在我的新系统中,我只按权限的名称而不是权限id来存储权限权限 表[新]: permission\u name给定权限的名称 允许\u列一组列ID,由, 如何将所有权限的所有记录转换为一个简单记录,但将rank列转换为新

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

它是针对权限系统的,表表示什么列组id获得什么权限id

表[旧]:
权限\u id
给定权限的id
rank
获取权限的列组id

现在,对于旧的表系统,它使用对
权限
表的额外调用来查找与
权限\u id
链接的权限的名称,在我的新系统中,我只按权限的名称而不是权限id来存储权限权限

表[新]:
permission\u name
给定权限的名称
允许\u列
一组列ID,由


如何将所有权限的所有记录转换为一个简单记录,但将
rank
列转换为新的
allowed\u 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
;

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

“一个列组ID字符串,以”分隔,不要这样做。另外,替换容易索引、搜索、连接等通常不是很好的做法。。。整数id引用和更昂贵的字符串引用。基本上,听起来你的“升级项目”与升级完全相反。我同意其他评论:这不会改善你的系统。如果要摆脱单独的查询来检索权限名称,只需将表连接到检索权限的查询即可。这仍然比使用字符串快得多。