Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database Codeigniter:如何使用多个db行跟踪不活动?_Database_Codeigniter_State - Fatal编程技术网

Database Codeigniter:如何使用多个db行跟踪不活动?

Database Codeigniter:如何使用多个db行跟踪不活动?,database,codeigniter,state,Database,Codeigniter,State,我需要跟踪用户任务的完成情况 我从一个名为“first_login”、“profile_complete”、“other_thing_complete”的行开始 我想把这些都合并成一行“活动状态” 我只是不知道如何在这个字段中正确地存储数据,以及如何检索数据 它应该是什么类型的字段,我应该如何读/写它?我不确定我是否完全理解这些要求-我相信这里的其他人会有更好的答案。。。但这是我的计划 我假设您已经有了一个users表 如果您添加了一个活动表和一个用户活动表会怎么样 activity -----

我需要跟踪用户任务的完成情况

我从一个名为“first_login”、“profile_complete”、“other_thing_complete”的行开始

我想把这些都合并成一行“活动状态”

我只是不知道如何在这个字段中正确地存储数据,以及如何检索数据


它应该是什么类型的字段,我应该如何读/写它?

我不确定我是否完全理解这些要求-我相信这里的其他人会有更好的答案。。。但这是我的计划

我假设您已经有了一个users表

如果您添加了一个活动表和一个用户活动表会怎么样

activity
-------------
id
name

users_activities
------------------
id
activity_id
user_id

因此,每当用户完成一项活动时,只需向users\u activities表中添加一条记录

我不确定我是否完全理解这些要求,我相信这里的其他人会有更好的答案。。。但这是我的计划

activity
-------------
id
name

users_activities
------------------
id
activity_id
user_id
我假设您已经有了一个users表

如果您添加了一个活动表和一个用户活动表会怎么样

activity
-------------
id
name

users_activities
------------------
id
activity_id
user_id

因此,每当用户完成一项活动时,只需向users\u activities表中添加一条记录

如果您只想跟踪少量“活动”,则可以为每个要跟踪的活动创建一个带有BOOL列的表

activity
-------------
id
name

users_activities
------------------
id
activity_id
user_id
activity
--------
INT user_id
BOOL first_login (default 0)
BOOL profile_complete (default 0)
BOOL other_thing_complete (default 0)
这甚至可以是现有用户表的一部分。每列将默认为0/false;当某个活动发生时,只需将其更新为true即可。例如:

UPDATE activity SET first_login = 1 WHERE user_id = 23

如果您只想跟踪少量的“活动”,那么可以为每个要跟踪的活动创建一个带有BOOL列的表

activity
--------
INT user_id
BOOL first_login (default 0)
BOOL profile_complete (default 0)
BOOL other_thing_complete (default 0)
这甚至可以是现有用户表的一部分。每列将默认为0/false;当某个活动发生时,只需将其更新为true即可。例如:

UPDATE activity SET first_login = 1 WHERE user_id = 23

你似乎对“行”的意思感到困惑。似乎您首先创建了一个包含列“first_login”、“profile_complete”、“other_thing_complete”等的表。每个用户在该表中都有自己的行,以及您指定的列

然后,您似乎已经确定要将所有这些数据元素存储在一个名为“activity_state”的列中,这大概是因为您意识到,在每次确定要跟踪的新任务时,都必须更新表

activity
--------
INT user_id
BOOL first_login (default 0)
BOOL profile_complete (default 0)
BOOL other_thing_complete (default 0)
如果要执行此操作(将所有数据元素存储在一列中),则应将其存储为对象


也就是说,Inomaha建议的方法是最好的方法。它是完全可扩展的。您不必担心解析字段。最重要的是,使用您的方法,当您在表中搜索要跟踪的任何值时,都必须执行完整的表扫描。

您似乎对“行”的含义感到困惑。似乎您首先创建了一个包含列“first_login”、“profile_complete”、“other_thing_complete”等的表。每个用户在该表中都有自己的行,以及您指定的列

然后,您似乎已经确定要将所有这些数据元素存储在一个名为“activity_state”的列中,这大概是因为您意识到,在每次确定要跟踪的新任务时,都必须更新表

activity
--------
INT user_id
BOOL first_login (default 0)
BOOL profile_complete (default 0)
BOOL other_thing_complete (default 0)
如果要执行此操作(将所有数据元素存储在一列中),则应将其存储为对象


也就是说,Inomaha建议的方法是最好的方法。它是完全可扩展的。您不必担心解析字段。最重要的是,使用您的方法,当您在表中搜索要跟踪的任何值时,都必须执行完整的表扫描。

永远不要存储序列化对象,访问它们的速度很慢(检索、非序列化),搜索更加困难

如果任务数量相对较少,并且它们是布尔型的,那么可以将它们存储为位掩码(这可能是错误的术语)

那么,值10表示profile_complete+其他东西2_complete。 查看或搜索这些

mysql> select 10&2;
+------+
| 10&2 |
+------+
|    2 |
+------+
1 row in set (0.00 sec)

mysql> select 10&8;
+------+
| 10&8 |
+------+
|    8 |
+------+
1 row in set (0.01 sec)

mysql> select 10&1;
+------+
| 10&1 |
+------+
|    0 |
+------+
1 row in set (0.00 sec)

mysql> select 10&4;
+------+
| 10&4 |
+------+
|    0 |
+------+
1 row in set (0.00 sec)

mysql> select 10&16;
+-------+
| 10&16 |
+-------+
|     0 |
+-------+
1 row in set (0.00 sec)
正如您所看到的,只有前两个查询返回了非零值,这意味着如果您搜索字段AND和8为非零值的记录,您将获得其他内容2完成的所有记录等。要将其他内容2完成设置为true,只需添加8即可。要将其他内容2设置为false,只需减去8即可


我自己从来没有这样做过,所以你可能会遇到我没有预料到的问题。但是,如果您跟踪的所有活动都是布尔型的,那么这应该可以实现最佳搜索/更新。

永远不要存储序列化对象,访问它们的速度很慢(检索、非序列化),搜索更困难

如果任务数量相对较少,并且它们是布尔型的,那么可以将它们存储为位掩码(这可能是错误的术语)

那么,值10表示profile_complete+其他东西2_complete。 查看或搜索这些

mysql> select 10&2;
+------+
| 10&2 |
+------+
|    2 |
+------+
1 row in set (0.00 sec)

mysql> select 10&8;
+------+
| 10&8 |
+------+
|    8 |
+------+
1 row in set (0.01 sec)

mysql> select 10&1;
+------+
| 10&1 |
+------+
|    0 |
+------+
1 row in set (0.00 sec)

mysql> select 10&4;
+------+
| 10&4 |
+------+
|    0 |
+------+
1 row in set (0.00 sec)

mysql> select 10&16;
+-------+
| 10&16 |
+-------+
|     0 |
+-------+
1 row in set (0.00 sec)
正如您所看到的,只有前两个查询返回了非零值,这意味着如果您搜索字段AND和8为非零值的记录,您将获得其他内容2完成的所有记录等。要将其他内容2完成设置为true,只需添加8即可。要将其他内容2设置为false,只需减去8即可


我自己从来没有这样做过,所以你可能会遇到我没有预料到的问题。但是,如果您跟踪的所有活动都是布尔值,那么这应该可以实现最佳搜索/更新。

这将破坏使用一行的目的。:)啊。。。我的错。将其限制为一行的原因是什么?我只是认为能够通过返回一个值来为一系列活动执行此操作会很酷…这会破坏使用一行的目的。:)啊。。。我的错。把它限制在一排的原因是什么?我只是觉得能在一堆活动中这样做会很酷