嘿那里,我是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?子查询?
非常感谢您提供的任何帮助。
答案 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;