Php 允许用户使用mysql为页面(ID、节点等)添加书签的最有效方式是什么?

Php 允许用户使用mysql为页面(ID、节点等)添加书签的最有效方式是什么?,php,mysql,arrays,Php,Mysql,Arrays,我的网站有几千个事件,由mysql数据库驱动的简单PHP页面 我想允许我的用户“书签”或“保存”或“收藏”他们感兴趣的事件。可能只是一个简单的AJAX切换,它将从mysql获取事件“ID”字段并将其添加到列表中 在不杀死我的DB的情况下,最好的方法是什么?我担心的是,当用户浏览我网站上的事件列表时,我需要在事件标题旁边显示一个小图标,该图标可能已标记为“已保存”,也可能未标记。我担心如果我做得不对,我只会在每次加载页面时敲打我的数据库25次 对这个问题有什么见解吗 编辑:另外,在mysql中存储

我的网站有几千个事件,由mysql数据库驱动的简单PHP页面

我想允许我的用户“书签”或“保存”或“收藏”他们感兴趣的事件。可能只是一个简单的AJAX切换,它将从mysql获取事件“ID”字段并将其添加到列表中

在不杀死我的DB的情况下,最好的方法是什么?我担心的是,当用户浏览我网站上的事件列表时,我需要在事件标题旁边显示一个小图标,该图标可能已标记为“已保存”,也可能未标记。我担心如果我做得不对,我只会在每次加载页面时敲打我的数据库25次

对这个问题有什么见解吗


编辑:另外,在mysql中存储用户的ID列表的最佳方式是什么?创建一个新表?我可以将它们放入现有用户表的字段中吗?

您可以首先查询用户最喜欢的项目是什么,然后在呈现项目表时,根据此列表检查该项目是否受欢迎

这样,只需两次查询即可完成所有操作

下面是一些伪代码:

$user_favorite_ids = getUserFavoriteItems(); // array of IDs

$page_entries = getPageEntries(); // array of objects (DB rows)

foreach(page_entries as $entry) {

   // print table row

   if(in_array($entry->id, $user_favorite_ids)) {
       // show as "favorite"
   }
}


但是,如果您的用户有数百或数千个喜爱的项目,这将不是非常有效。

使用AJAX保存/更新书签,但更新页面加载/显示逻辑,以便在每次加载页面时显示保存的书签。我想这个可以。谢谢。我想我会在活动日期过去一周左右后自动删除用户收藏夹列表中的项目,这样可以使这些列表保持较小。存储用户收藏夹列表的最佳方式是什么?起初我想我应该把一个列表放在users表的一个字段中,但是如果我删除了一个节点,比如说“35”,就不可能轻易地从everyones列表中删除这个ID,除非它在db中很容易访问——有什么想法吗?你可以有一个表:
user\u bookmarks
:(bookmark\u ID,user\u ID,一些其他的东西…)-bookmark_id是一个自动递增的主键-然后它就在一个大表中,您可以方便地为每个用户查询书签,就像删除单个书签一样。如果你想自动擦除旧的东西,你也可以在那里创建一个“creationDate”列。