Php 用新信息更新数据库,但保留旧信息

Php 用新信息更新数据库,但保留旧信息,php,mysql,sql,database-design,Php,Mysql,Sql,Database Design,如何使用新信息更新数据库,同时保留旧信息 我的目标是创建一个favorites按钮,当点击它时,它会将项目id添加到成员的favorites列表中,这样他们就可以调用fav.php?fav=janedoe之类的东西,并列出他们的favorites列表 我知道如何添加按钮并从数据库中获取条目id,我只需要运行mysql查询来更新,以及创建数据库列时的“类型” 行中的信息将如下所示 1,12,14,15,34,46,74 然后,若成员想要添加项目98,它将更新为 1,12,14,15,34,46,7

如何使用新信息更新数据库,同时保留旧信息

我的目标是创建一个favorites按钮,当点击它时,它会将项目id添加到成员的favorites列表中,这样他们就可以调用fav.php?fav=janedoe之类的东西,并列出他们的favorites列表

我知道如何添加按钮并从数据库中获取条目id,我只需要运行mysql查询来更新,以及创建数据库列时的“类型”

行中的信息将如下所示

1,12,14,15,34,46,74

然后,若成员想要添加项目98,它将更新为

1,12,14,15,34,46,74,98

最后加98


我意识到这是一篇“你能为我做这件事吗”的帖子,但我只是不知道从哪里开始。

你应该创建一个新表,名为:

成员验证页面:

  • MemberId
  • PageId

然后,每当用户将一个页面标记为最喜爱的页面时,都要在此表中插入一个内容。

您应该创建一个名为以下内容的新表:

成员验证页面:

  • MemberId
  • PageId

然后,每当用户将一个页面标记为最喜爱的页面时,都要在此表中插入一个内容。

如果要维护字符串,可以在查询中执行以下操作:

UPDATE `table`
SET `fav` = CONCAT(`fav`, ",98")
WHERE `id` = 1234;
或者在PHP中执行concat并使用它进行更新-即首先获取现有字符串-但这意味着需要2个查询


但正如@MahmoudGamal所建议的,单独的表格是最好的。因为这很难从中“删除”项目。。。您需要执行PHP端的操作。

如果您确实希望维护字符串,可以在查询中执行以下操作:

UPDATE `table`
SET `fav` = CONCAT(`fav`, ",98")
WHERE `id` = 1234;
或者在PHP中执行concat并使用它进行更新-即首先获取现有字符串-但这意味着需要2个查询


但正如@MahmoudGamal所建议的,单独的表格是最好的。因为这很难从中“删除”项目。。。您需要在PHP端进行操作。

您不应该在单个列中保存逗号分隔的值。这违反了法律

检查下面的答案以获得更广泛的解释:


最好的方法是按照@Mahmoud Gamal的建议创建一个单独的表,这很容易长期维护。

您不应该在单个列中保存逗号分隔的值。这违反了法律

检查下面的答案以获得更广泛的解释:


最好的方法是按照@Mahmoud Gamal的建议创建一个单独的表,从长远来看很容易维护。

创建一个表“favs”如何,您可以在其中存储id以及将其添加到favs列表中的用户

ID | USER_ID
------------
5  | user_1
6  | user_1
8  | user_2
6  | user_2

select ID from favs where USER_ID = "user_1"
这将获取用户_1的页面id

请记住,如果用户需要添加/删除fav页面,则需要管理此表的插入/更新/删除

一个更简单的解决方案是在用户的详细信息中有一个favs pages字段

USER_ID| FAVS
-------|-----
user_1 | 5*6
user_2 | 8*6
通过使用此解决方案,您将能够轻松解析favs字段并获取有关页面的信息(在本例中,您只需要解析字符串)

当您需要更新或删除用户favs列表中的任何页面时,您只需解析字符串、删除要删除的页面id或将新页面附加到字符串中即可


这种情况下的缺点是,您将无法轻松找到fav页面(最终将使用LIKE构造)。

创建一个表“fav”,您可以在其中存储id以及将其添加到fav列表的用户,怎么样

ID | USER_ID
------------
5  | user_1
6  | user_1
8  | user_2
6  | user_2

select ID from favs where USER_ID = "user_1"
这将获取用户_1的页面id

请记住,如果用户需要添加/删除fav页面,则需要管理此表的插入/更新/删除

一个更简单的解决方案是在用户的详细信息中有一个favs pages字段

USER_ID| FAVS
-------|-----
user_1 | 5*6
user_2 | 8*6
通过使用此解决方案,您将能够轻松解析favs字段并获取有关页面的信息(在本例中,您只需要解析字符串)

当您需要更新或删除用户favs列表中的任何页面时,您只需解析字符串、删除要删除的页面id或将新页面附加到字符串中即可


这种情况的缺点是,您无法轻松找到fav页面(最终将使用LIKE构造)。

设计比存储在字符串中要好得多,更灵活,更易于维护。(我正在写一个这样的答案)。@Mahmoud Gamal thx,我没有想过那样做,但我真的很想这样做,这样te ID存储在一行中,(OP更新)@Brian Oh我认为字符串是更好的选择,因为它可以节省空间等,只需要一个新列,而不需要一个新表。它的设计比存储在字符串中更好,更灵活,更易于维护。(我正在写一个这样的答案)。@Mahmoud Gamal thx,我没有这样想,但我真的很想这样做,这样te ID存储在一行中,(OP更新)@Brian Oh我认为字符串是更好的选择,因为它可以节省空间等,只需要一个新列,而不是一个新表thxAlright,这不是一个规范化的数据库。你需要有3张桌子<代码>用户,
项目
用户项目
表将链接这两个项目,因此添加和删除记录很容易
user\u items
将具有
user\u id
item\u id
列。好的,这不是一个规范化的数据库。你需要有3张桌子<代码>用户,
项目
用户项目
表将链接这两个项目,因此添加和删除记录很容易
user\u items
将有
user\u id
item\u id
列。。。好电话,我忘了。(但无论如何我还是不会这样做!)我