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

时间:2012-10-30 13:30:17

标签: php mysql sql database-design

如何使用新信息更新数据库,但保留旧信息?

我的目标是有一个收藏夹按钮,点击它时会将项目ID添加到会员收藏列表中,这样他们就可以调用fav.php?fav = janedoe之类的东西,并列出他们的收藏列表。

我知道如何添加按钮并从数据库中获取项目ID我真的需要运行更新的mysql查询以及创建数据库列时的“类型”我认为。

行内的

信息将如下所示

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

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

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

将98添加到最后。

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

4 个答案:

答案 0 :(得分:2)

您应该创建一个名为“

”的新表

<强> MembersFavoritePage:

  • MemberId
  • PageId
  • ...

然后,只要用户将页面标记为收藏页面,就可以插入此表格。

答案 1 :(得分:1)

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

UPDATE `table`
SET `fav` = CONCAT(`fav`, ",98")
WHERE `id` = 1234;

或者在PHP中进行concat并使用它进行更新 - 即首先获取现有字符串 - 但这意味着有2个查询。

但@MahmoudGamal建议的单独表格最好。因为这很难从'删除'项目......你需要在PHP方面进行操作。

答案 2 :(得分:1)

您不应在单列中保存逗号分隔值。这违反了First normal form

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

Is storing a delimited list in a database column really that bad?

最好的方法是根据@Mahmoud Gamal的建议创建单独的表格,从长远来看易于维护。

答案 3 :(得分:-1)

如何创建一个表“favs”,您可以在其中存储ID以及将其添加到他的收藏夹中的用户?

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

select ID from favs where USER_ID = "user_1"

这将为user_1获取pages'id。

如果用户需要添加/删除收藏页,请记住您需要管理此表的插入/更新/删除。

更简单的解决方案可能是在用户的详细信息中包含favs pages字段

USER_ID| FAVS
-------|-----
user_1 | 5*6
user_2 | 8*6

通过使用此解决方案,您将能够轻松解析favs字段并获取有关页面的信息(在这种情况下,您只需要解析字符串)。

当您需要更新或删除用户favs'list中的任何页面时,您只需解析字符串,删除要删除的页面ID或将新页面附加到字符串。

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