有个文章表(article),以下是表中字段:
id int(10) 自增
catid smallint(6) 分类id
subject varchar(50) 标题
uid int(10) 用户id
dateline int(10) 发表时间
想要获取每个用户或指定用户最新的一篇文章,如果用group by的话,得到的是第一篇而不是最新的,我的实现方法是循环生成获取每个指定用户的最新一篇文章的sql:select * from article
order by dateline
desc limit 0,1,然后union起select语句来获取
不知道还有什么好的方法或者方便的方法?
[code="java"]
select a.* from article a,(
select max(id) id from article group by uid ) b
where a.id=b.id;
[/code]
解释一下:可以按UID分组,查询组中ID最大的那个,因为ID自增,所以最新的ID也就最大,且是主键,查询快。
查询出每个用户最新的文章ID之后,再关联全表查询这些最新的文章
你可以测试一下效率看,应该还可以的
[code="java"]
select a.*
from article a,(
select uid,max(dateline) dateline
from article
where 1=1
group by uid ) b
where a.uid=b.uid and a.dateline=b.dateline
[/code]