如何在我的在线应用程序中为每个用户存储数组?

时间:2012-02-04 11:13:33

标签: database arrays

我正在构建一个小型在线应用程序(PHP / MySQL),用户可以注册成为会员,在会员区内,他们可以获得一系列测验。

当显示给定用户的测验列表时(即他的浏览器刚刚请求带有列表的页面),我需要知道,对于每个测验,用户是否已经过去了。因为如果他这样做我会在旁边显示一个复选标记。这是为了帮助用户跟踪他们对网站的使用情况。

我的问题:所以基本上我需要存储一个"采取的测验列表"为每个用户。但我不确定这样做的最佳方式。

到目前为止我的解决方案:每个测验都有一个ID,所以我打算存储"采取的测验列表"对于每个用户,我的数据库为字符串(值以逗号分隔)。然后,当我需要使用它时,我从数据库中读取字符串并将其转换为数组(反之亦然,以便将其存储回来)。

UPDATE :显然有两个可行的选项:1)使用上面描述的方法将数组存储为字符串,2)是创建另一个MySQL表来存储测验ID / user-id对。在这一点上,我想知道哪个解决方案更快,如果网站变得流行。使用第一个选项,我将有额外的工作将字符串转换为数组并返回,但之后我将搜索一个小数组(即,仅包含单个用户的测验)。使用MySQL解决方案,我不需要来回转换字符串,但我需要搜索更大的数据集(即所有用户进行的所有测验)。对于大量用户(例如,1000)哪种方法更快的猜测?

3 个答案:

答案 0 :(得分:2)

如果您使用像MySQL这样的东西,那么尝试一个类似的表结构:

表:用户
user_id | user_name

表:测验
quiz_id | quiz_name

表:quiz_taken
taken_id | user_id (FK) | quiz_id (FK) | timestamp

在quiz_taken表中为每次参与测验添加一个条目。此外,您可以随时添加更多颜色以存储更多详细信息。

答案 1 :(得分:1)

这个解决方案对我来说似乎没问题。或者您可以在中间使用“测验”表和users_to_quizs表,其中外键链接到用户和测验。它更符合关系数据库标准,但对于你想做的事情来说似乎有点复杂!

我会坚持你的解决方案! (你使用PHP吗?>在这种情况下使用implode / explode,你会得到你真正快速的东西!: - ))

答案 2 :(得分:0)

check123的解决方案很好。 您不希望将整个测验存储为数组 一个补充

taken_id | user_id(FK) | quiz_id (FK) | timestamp | responses

虽然响应的单独表格更好,但如果您不需要搜索回复, 要转换测验数组,请使用

$quiz_string=json_encode($quiz_array)

//Store $quiz in the responses field

//and to convert it back to array, use:
$quiz_array=json_decode($quiz_string_from_database)

构建和减少爆炸是非常耗时的。 json工作得很好