我可以像这样替换数据库中 PHP 中的数据吗?



我有一个数据库,有一行名为user_role。默认值设置为由我使用PHP0

如果我想用像MemberAdmin这样的字符串替换该0,我可以写这样的东西吗:

$result_from_db = 0;
if($result_from_db == 0) {
$role = "Member";
} elseif($result_from_db == 1) {
$role = "Admin";
} else {
$role = "Invalid!";
}
echo $role;  // Changes the value from DB to my custom string

虽然我可以在数据库中将0重命名为Member,但我想知道这样的事情是否可能。

您可以使用CASE来执行此操作,请参阅 SQL CASE

SELECT id, name, user_role
CASE
WHEN user_role = 0 THEN "Member"
WHEN user_role = 1 THEN "Admin"
ELSE "Invalid!" 
END AS user_role_string
FROM user_table;

是的,您可以使用CASE语句对这些关联进行硬编码,但是否应该这样做是另一个问题。

您描述的是外键关系。 其中标识符0的标签为'Member',标识符1的标签为'Admin',等等。

如果将这些关联硬编码到它们的标签,则任何更改都需要复制到已使用硬编码的每个代码段中。 相反,为什么不直接有另一个角色表呢?

CREATE TABLE user_role (
id             INT,
label          VARCHAR(32),
is_admin       INT,
is_super_user  INT,
is_a_moomin    INT,
PRIMARY KEY (id)
)

然后,您只需使用JOIN来查找所需的标签或属性...

SELECT
user_table.*,
user_role.label   AS user_role_label
FROM
user_table
INNER JOIN
user_role
ON user_role.id = user_table.role_id

此外,通过使用此表,您可以创建外键约束。

ALTER TABLE user_table ADD FOREIGN KEY fk_user_role (user_id) REFERENCES user_role (id)

然后数据库可以保证user_table.role_id中的值必须存在于user_role.id中。

这些都是关系数据库的用途以及它们如何工作的基本方面。 不同的数据库对这些数据库的语法略有不同。我强烈建议您研究它们并研究使用这些结构的数据库标准实践。

执行此操作的 SQL "关系方式"是拥有一个名为roles的表,并使用user_role列作为roles表的外键从该表中提取数据。(非常简化的(表定义如下所示:

Table: roles
------------------
*id:     int(10)
name:    varchar(200)

其中id是该表的主键。然后,若要获取用户及其角色,请执行以下查询:

SELECT * FROM users, roles WHERE users.user_role = roles.id AND (...any other conditions you have)

您可以向roles表添加更多角色,SQL 语句仍将相同。

最新更新