php - 在数据库中存储用户首选项的正确方法是什么?

标签 php mysql sql database storage

我有一个 MySQL 数据库,用于存储我的服务提供的用户电子邮件和新闻文章。我希望用户能够保存/为他们以后想阅读的文章添加书签。

我实现此目标的计划是在我存储用户电子邮件的表中有一列,其中包含以逗号分隔的唯一 ID 字符串,其中唯一 ID 是在添加到每篇文章时分配给它们的值数据库。这些文章存储在单独的表中,我使用 UUID_SHORT() 生成 BIGINT 类型的唯一 ID。

例如,假设在我存储文章的表中,我有

ArticleID             OtherColumn
4419350002044764160   other stuff
4419351050184556544   other stuff

在我存储用户数据的表中,我会有

UserEmail             ArticlesSaved                                   OtherColumn
examlple1@email.com   4419350002044764160,4419351050184556544,...     other stuff
examlple2@email.com   4419350002044764160,4419351050184556544,...     other stuff

表示前两个用户保存了ID为44193500020447641604419351050184556544的文章。

这是将类似内容存储在数据库中的正确方法吗?如果有更好的方法,谁能解释一下?

我考虑的另一个选择是为每个用户创建一个单独的表,我可以在其中将他们保存的文章的 ID 存储到一个列中,尽管这篇文章的答案不是很有效:Database efficiency - table per user vs. table of users

最佳答案

我会为用户建议一张表,为他/她的书签文章建议一张表。

用户

id - int autoincrement
user_email - varchar50

首选项

id int autoincrement
article_index (datatype that you find accurate according to your  structure)
id_user (integer)

通过这种方式,用户可以轻松地为文章添加书签和取消书签。连接两个表是通过用户中的 id 和首选项中的 id_user 完成的。确保首选项/书签中的每一行都是一篇文章(不要做任何逗号分隔的事情)。这样做会为您节省很多时间/并发症 - 我保证!

获取用户的书签页面的典型查询如下所示。

SELECT u.id,p.article_index,p.id_user FROM users u
LEFT JOIN preferences ON u.id=p.id_user
WHERE u.id='1' //user id goes here, make sure it's an int.. apply appropriate security to your queries.

关于php - 在数据库中存储用户首选项的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28070598/

相关文章:

php - 无法使用Google PHP客户端库通过YouTube API设置水印

mysql - 使用 WHERE 选择 LEFT/RIGHT JOIN 并返回 NULL

mysql - 初级SQL数据库查询

php - AND 条件在 MySQL 查询中不起作用

android - 将一列更新为其他两列的总和

php - 计数后对结果进行排序 PHP

javascript - 加载 20MB 以上网页的最有效方法

php - 为所选评论生成日期

c# - 哪个ORM支持多行更新和删除

mysql - 如何更新mysql表中存储的行顺序?