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



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

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

我的问题:所以基本上我需要为每个用户存储一个"已完成测验"的列表。但我不确定最好的方法

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

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

如果您使用MySQL之类的东西,请尝试类似的表结构:

表:用户
user_id | user_name

表:测验
quiz_id | quiz_name

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

在测验表中为每次参加测验添加一个条目。此外,您还可以添加更多的柱来存储更多的详细信息。

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

我会坚持你的解决方案!(你使用PHP吗?>在这种情况下使用内爆/爆炸,你会很快得到你想要的!:-)

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完美工作

最新更新