我有一个数据库,并且有一个名为user_role
的行。我使用0
将默认值设置为PHP
。
如果我想用0
或Member
这样的字符串替换Admin
,我可以这样写吗:
$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
,但我想知道是否可以这样做。
答案 0 :(得分:1)
您可以使用output
------
CC: 1234 Month: 12 Year: 20
进行操作,请参见SQL CASE
CASE
答案 1 :(得分:1)
是的,您可以使用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
必须 中的值。
这些都是关系数据库所针对的以及它们如何工作的所有基本方面。不同的数据库对此具有不同的语法。我强烈建议研究它们,并研究使用这些构造的数据库标准实践。
答案 2 :(得分:0)
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语句仍然相同。