【问题标题】:Duplicating Facebook's "Like" Function复制 Facebook 的“点赞”功能
【发布时间】:2011-12-03 01:14:33
【问题描述】:

在我的数据库中有 2 个表:“books”和“users”。我在一个页面上显示所有书籍,并希望用户可以选择单击一个小链接“我已阅读此书”,类似于 Facebook 的带有状态的 Like 功能。用户可以单击他们已阅读该书或取消单击以“未读”该书。其他登录的用户也可以看到谁读了什么。我质疑我的方法,并希望获得有关其他方向的反馈,以采取类似的方式。

我的想法是在“users”表中有一个字段,可能类似于“books_read”,我将在其中存储一组值(book_id)。在显示所有书籍的前端,我会查询“books_read”字段,如果一个值与当前的 book_id 匹配,那么该书的下方将是“用户 X 已阅读此书”之类的内容。

简而言之,我会在“users”表中存储一个“book_id”数组,以收集每个用户读过的书。我会提取这个数组并将 ID 与所查询的每本书进行比较,如果匹配,则输出用户已阅读该书。

我是否遗漏了什么,或者可能没有寻找更清洁的方法?

【问题讨论】:

    标签: php mysql arrays


    【解决方案1】:

    在诸如 MySQL 之类的 RDBMS 中,将列表存储在字段中很少是一个好主意,尤其是当您知道稍后将在列表中查找特定部分时。数据库无法通过这样做来利用索引。

    相反,您应该制作一个额外的表格来链接用户和阅读的书籍。或者,您可以将其命名为 *users_books* 并将 read 移到它自己的列中。

    users_booksread
    -----------
    user_id
    book_id
    

    【讨论】:

    • 完美,这种方法让我忘记了。也更有条理。谢谢!
    【解决方案2】:

    创建一个单独的表,可能称为book_read

    在其中,对于用户喜欢的每一本书,存储user_idbook_id

    然后你就不用处理乱七八糟的数组了,一切都标准化了,你的设计会更干净,你的数据库也会更灵活。此外,您的用户表不会有一堆额外的杂物,它们会以不幸的方式影响性能。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-29
      • 2014-08-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多