插入时将行数限制为特定数量

时间:2014-09-18 14:44:54

标签: php mysql wordpress

我正在考虑为我的wordpress博客实施一个视图历史记录,用户可以在其帐户页面中查看以前查看过的文章作为列表。

我想将此限制为每个用户在任何时间点的24个唯一页面历史记录,这意味着,如果文章数量超过24,则会删除最旧的文章行,并将新文章添加到表格中。< / p>

我正在使用PHP和MySQL。

以下是我目前对实施的看法:

  • 使用user_id和post_id列创建表
  • 当用户查看文章时,将新行插入表格
  • 选择具有当前user_id的行,如果行数超过24,
  • 删除最旧的行

我不确定这是否是最好的方法,因为每个用户页面视图有3个额外的数据库查询非常重。

有更好的方法吗?

3 个答案:

答案 0 :(得分:0)

意识形态很好。通过更新最旧的行而不是删除它然后添加新行来改进它。 ;) 还可以进行单个读取查询和单个写入查询。

  1. 进行类似这样的查询

    SELECT (SELECT COUNT(*) FROM recentArticles WHERE userID = 23)
    AS NoOfArticles, articleID, timestamp 
    FROM recentArticles 
    WHERE userID = 23 
    ORDER BY timestamp ASC 
    LIMIT 1;
    
  2. 如果 NoOfArticles &lt; 24然后执行插入查询,否则执行更新查询到articleID

答案 1 :(得分:0)

您始终可以使用Cookie来实现此操作,以确定访问了哪些页面并在用户PC上保留运行列表。这将减少站点的流量,将处理脚本放在用户端,并且可以更容易实现。

话虽如此,我同意另一个答案,如果表格已满,则更新最旧的条目。这消除了删除和添加行的需要。键入时间日期标记,以便在您显示条目时对其进行排序,并确定哪个页面是最旧的(如果> = 24页,则需要更新。

答案 2 :(得分:0)

您可以合并两个查询。这样,您将节省脚本的执行时间。因此,如果帖子数超过24,基本上DELETE行。您可以根据您的确切需要修改此查询。但是,是的,你可以这样思考。

DELETE FROM `table_name`
WHERE id=(SELECT (CASE WHEN COUNT(id)>24 then id END)
          AS last_id
          FROM `table_name`
          WHERE user_id='XX'
          ORDER BY id DESC LIMIT 1);