group-by - mysql中group by之后order by无效
怪我咯
怪我咯 2017-04-17 14:20:47
0
3
366

创建一张表(比如说帖子回复表,简单的几个字段)

create table replies(
    id int unsigned primary key auto_increment,
    uid int unsigned not null default 0,
    tid int unsigned not null default 0,
    content varchar(1000) not null default '',
    inputtime int unsigned not null default 0,
    updatetime int unsigned not null default 0
)engine myisam charset utf8;

插入数据

insert into replies
values
(null,3,4,'第四篇帖子的回复内容',1459848612,1459848612),
(null,4,1,'第一篇帖子的回复内容',1459858612,1459858612),
(null,3,3,'第三篇帖子的回复内容',1459868612,1459868612),
(null,5,1,'第一篇帖子的回复内容',1459878612,1459878612),
(null,1,5,'第五篇帖子的回复内容',1459888612,1459888612),
(null,2,5,'第五篇帖子的回复内容',1459898612,1459898612),
(null,8,2,'第二篇帖子的回复内容',1459908612,1459908612);

这样排序自然没什么问题

select tid,max(inputtime) as aa from replies group by tid order by aa desc;

然而

select tid,max(inputtime) from replies group by tid order by inputtime desc;

这样排序的话,结果却是这样

附个人理解:
这个max(inputtime)虽然和表上的数据是一样的,但它并不代表某个tid的inputtime,order by inputtime 实际是对表中的inputtime排序,所以这里看不到效果,但感觉这个理由有点牵强,请赐教,在这里谢谢诸位了

怪我咯
怪我咯

走同样的路,发现不同的人生

全部回覆(3)
黄舟

https://segmentfault.com/a/1190000004879...
正確理解應該是shenyangyeshuai + 0808xyj + gzchen三個的答案

小葫芦

本身 這兩個就是 不同的SQL,MySQL 中 分組之後,預設取其第一個資料

黄舟

首先第二條語句語意上就存在問題,既然max(列)後就不應該再按照原始(列)排序。
然後,你先了解sql語句的執行順序你的疑惑就解決了
from -->join-->on-->where -->group by --> having --> select - -> order by -->limit

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!