php - 将 MySQL 转换为新系统?

标签 php mysql database

我有一个旧的 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/

相关文章:

php - 重新排列数组索引 Eloquent Laravel

php - 将简码添加到 woocommerce 产品页面

php如何添加引用

php - 如何使用 PHP 在客户端计算机中启用 javascript?

mysql - 如何使用参数重复mysql游标?

php - 使用数据库表中的特定数据行填充表单字段以更新 PHP MYSQL

mysql - Blob数据库,极其动态的数据库

java - Android:使用现成的 Django 数据库?

sql - CASE WHEN NULL 在 SQLite 中产生错误结果?

PHP 是否有更简单、更整洁的方法来做到这一点?