将mySQL数据限制为每列1个条目5列2条目

时间:2009-09-21 04:58:05

标签: sql mysql codeigniter

嘿那里,我是mySQL的新手,所以我对语言知之甚少,可能会妨碍我搜索我需要的结果。

我正在CodeIgniter中构建一个简单的应用程序,它将访问Twitter API并返回一定数量的各种用户的状态更新表。我想将此限制为每个用户显示5个更新。

想象一下,我有以下数据库,它本质上是我实际数据库的简化版本。

person   picture   update
john     pic 1     lorem ipsum
john     pic 1     lorem ipsum
john     pic 1     lorem ipsum
john     pic 1     lorem ipsum
john     pic 1     lorem ipsum
jim      pic 2     lorem ipsum
jim      pic 2     lorem ipsum
jim      pic 2     lorem ipsum
jim      pic 2     lorem ipsum
jim      pic 2     lorem ipsum
joe      pic 3     lorem ipsum
joe      pic 3     lorem ipsum
joe      pic 3     lorem ipsum
joe      pic 3     lorem ipsum
joe      pic 3     lorem ipsum
steve    pic 4     lorem ipsum
steve    pic 4     lorem ipsum
steve    pic 4     lorem ipsum
steve    pic 4     lorem ipsum

我想要做的是使用SQL查询限制每个人进入数据库的更新次数。

我正在使用INSERT IGNORE进行查询,因为每次刷新页面时,我都不希望插入重复的条目,而只是为整个用户添加LIMIT 5限制5。我只想为每个用户限制5个。

有没有简单的方法可以做到这一点?替换? UPDATE?子查询?

非常感谢您提供的任何帮助。

1 个答案:

答案 0 :(得分:0)

最简单的方法可能是在INSERT上触发。

这将使应用程序逻辑仅处理在需要时发送INSERTS。

在mySQL方面,触发逻辑会在插入新记录之前删除除最近的4个(或任何你想要的标准)记录之外的所有记录。

它可能是这样的:(注意:未经测试+关于嵌套查询中LIMIT clasue的担忧,如果需要可以找到替代技巧。)

此代码段假定id字段可用。这样的字段在OP的写入中没有显示,但是很有意义,因为这样的PK使得CRUD操作变得如此简单(而不是拼出复合键,这里将是所有3个字段......)。可以在INSERT之后进行触发,这样可以避免在新记录重复时不必要地删除某些记录的可能性。

CREATE TRIGGER LimitTweetUpdates BEFORE INSERT ON myTweeterTable
  FOR EACH ROW BEGIN
    DELETE FROM myTweeterTable
    WHERE person = NEW.person
    AND id NOT IN 
      (SELECT id FROM myTweeterTable  
       WHERE person = NEW.person
       ORDER BY id DESC
       LIMIT 5)
  END;