我有一个数据库驱动的社区网站,用户可以在其中发布条目。每个条目都有一个日期。现在我想知道谁是第一个条目为1000的用户。这是可能的SQL查询还是我必须以编程方式进行,计算每个帖子直到达到限制?还是其他任何解决方案?
答案 0 :(得分:2)
create table posts (
id int not null auto_increment primary key,
user_id int,
post_date date
) engine = myisam;
insert into posts (user_id,post_date)
values
(1,'2011-03-02'),
(1,'2011-04-10'),
(1,'2011-11-13'),
(2,'2011-03-02'),
(2,'2011-03-02'),
(3,'2011-01-01'),
(3,'2011-01-02'),
(3,'2011-01-03');
select * from (
select posts.*,
@num := if(@user_id = user_id, @num + 1, 1) as rownum,
@user_id:=user_id as uid
from posts,(select @user_id := 0, @num := 1) as t
order by user_id asc, post_date asc)
as tab
where rownum = 3
order by post_date limit 1
这是我找到第一个达到3条消息的用户的示例。希望它可以帮到你。
答案 1 :(得分:1)
SELECT user_id, time
FROM table
LIMIT 1 OFFSET 999
GROUP BY user_id
ORDER BY time
我不确定在那里放置ORDER BY,可能需要嵌套查询或者某些东西,因为我在完成GROUP BY之后没有按时使用聚合。
但你可能正在寻找的部分是LIMIT X OFFSET Y
答案 2 :(得分:0)
我不记得MySQL语法,但我认为你应该这样做:
首先,向每个条目添加其计数(当然,每个用户)。可能有一些MySQL特定的方法,但如果所有其他方法都失败了,你可以做类似
的事情SELECT Entry.*,
(SELECT COUNT(*) FROM Entries E2 WHERE E.id<E2.id AND E.user=E2.user) AS EntryCount
完成后,选择计数为1000的第一个条目,按输入时间排序,然后选择其用户。