在MySQL中为单个列分配多个值

时间:2014-01-28 15:25:44

标签: mysql

我现在正在开展一个项目,用户拥有一个可以进出的活动项目,以及他们可以访问并选择成为他们活动项目的项目列表。管理员控制用户可以访问的项目。什么是为用户存储活动和可访问项目的好方法,以及管理员可以允许访问的所有项目的列表?

现在我有一个包含所有项目的表,以及包含当前活动项目的users表中的项目列。

是否可以创建名为" accessible_projects"的列。并在其中分配多个值?

2 个答案:

答案 0 :(得分:3)

我不会在accessible_projects列中存储多个值。我创建了一个名为user_accessible_projects的链接表,其中包含user_id和project_id。因此,如果用户X有5个可访问项目,则此表将为用户X提供5行。

这是一个简化的表结构:

===========
user table
===========
user_id

=============
project table
=============
project_id

==============================
user_accessible_projects table
==============================
user_id
project_id

我还建议在user_accessible_projects中的user_id和project_id上使用唯一索引(或主键)以确保数据完整性,例如你不希望在这个表中有2行与完全相同的user_id和project_id。并且您还希望user_accessible_projects表中的外键返回到用户和项目表。如果user_accessible_projects中仍有关联的行,则外键将确保无法从用户或项目表中删除记录。

如果您不熟悉数据库中的参照完整性,可以阅读更多相关信息here。它可以保证您的数据干净整洁,从而不会有任何不良数据进入数据库。毕竟,防止不良数据的最佳方法是永远不要让它首先发生。

答案 1 :(得分:1)

如果要将变量列表保存到列,请在列中使用逗号分隔列表。然后你可以在服务器端爆炸它们。

PHP示例:

// make connection

$sql = "SELECT accessible_projects FROM table WHERE id = 1";
// run query, save results to array

$accessible_projects = explode(',', $result_array['accessible_projects']);

echo 'Your accessible_projects:<br />'
foreach($accessible_projects as $project) {
   echo $project;
}