我想知道如何在行的列中包含多个值。在这种情况下,为用户提供多个访问号码,以便我可以检索这些号码以进行页面访问。
我现在拥有的:
---------------------------------------------------------------------------------
id | first_name | last_name | email | password | date | access |
---------------------------------------------------------------------------------
1 | Test | User | test@website.com | md5pass | -date- | 2
---------------------------------------------------------------------------------
我想给用户多个访问代码/变量/整数。
像这样:
---------------------------------------------------------------------------------
id | first_name | last_name | email | password | date | access |
---------------------------------------------------------------------------------
1 | Test | User | test@website.com | md5pass | -date- | 2, 201, 3908
---------------------------------------------------------------------------------
这可能吗?
在检索它之后,如果可能的话,我该怎么做呢?
我计划做类似的事情:如果用户访问代码'201',则提供访问/显示内容。
答案 0 :(得分:1)
你的方式可以工作;在检索用户行时,只需将access
列展开并进行修剪。
但是,正确的方法是使用不同的表,例如user_access。最简单的,看起来像:
CREATE TABLE user_access (
user_id int,
access int
)
对于每个用户,此表将为每个访问代码定义一行。以下是您的示例在表格中的样子:
select * from user_access;
+---------+--------+
| user_id | access |
+---------+--------+
| 1 | 2 |
| 1 | 201 |
| 1 | 3908 |
+---------+--------+
然后,当您检索用户并且您对其访问级别感兴趣时,您将加入user_access表:
SELECT u.*, ua.access FROM users u LEFT JOIN user_access ua on u.id = ua.user_id WHERE u.id = <some user id>
(左连接,因为无法保证用户已定义任何访问权限)
或者,在两个查询中执行此操作:
SELECT * FROM users WHERE id = <some user id>
SELECT access FROM user_access WHERE user_id = <some user id>