mysql查询如何先排序再分组呢?纠结了好几天了。

php中文网
发布: 2016-06-06 09:45:01
原创
1917人浏览过

mysql分组去重排序查询

比如数据表“article”中有一组这样的数据:

id   uid    title...  ....   .....375   1     文章标题1376   1     文章标题2377   1     文章标题3378   2     asdfasdf379   3     fdaewqwe...  ....   .....
登录后复制

然后我写了一句这样的sql:
select * from article order by id desc
执行后,结果如下:

id   uid    title...  ....   .....379   3     fdaewqwe378   2     asdfasdf377   1     文章标题3376   1     文章标题2375   1     文章标题1...  ....   .....
登录后复制

然后我又加入了group by,为了只调用每个用户的1篇文章,sql代码如下
select * from article group by uid order by id desc
执行后,结果如下:

id   uid    title...  ....   .....379   3     fdaewqwe378   2     asdfasdf375   1     文章标题1...  ....   .....
登录后复制

上面的数据看似正常,其实不对,因为先分组后排序了,所以我没法取得用户的最新文章了,始终是第一篇,正确的结果应该是:

id   uid    title...  ....   .....379   3     fdaewqwe378   2     asdfasdf377   1     文章标题3...  ....   .....
登录后复制

这样才是取得用户的最新文章,并且过滤掉了用户的其他文章,因为如果页面上显示5条文章,不能有3条都是同一个人写的文章,应该这5条应该是最近发表文章的5个人的最新文章。

期间查询了很多技术资料,说用max或distinct的都不对,结果都是只显示第一篇文章。而且distnct更查询出来的结果顺序不对,更乱了。比如1,2,10,20,这几个id号变成了:

110220
登录后复制

所以,想请教各路SQL大仙,看看应该怎么办呢?

当然,要求不能使用子查询。

最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号