这几天让一数量据查寻难了。关键是对group by 了解的不足深层次。才出現那样的状况 这类要求,我觉得许多人都碰到过。下边就是我仿真模拟我的內容表 拷贝编码 编码以下: CREATE TABLE `test` ( `id` INT(10) NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `category_id` INT(10) NOT NULL, `date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=MyISAM ROW_FORMAT=DEFAULT; INSERT INTO `test` (`id`, `name`, `category_id`, `date`) VALUES (1, 'aaa', 1, ':37'), (2, 'bbb', 2, ':55'), (3, 'ccc', 1, ':02'), (4, 'ddd', 1, ':15'), (5, 'eee', 2, ':35'); 现在我必须取下每一个归类中全新的內容 拷贝编码 编码以下: select * from test group by category_id order by `date` 結果以下 显著。我觉得就是我要想的数据信息,缘故是msyql早已的实行次序是 写的次序:select ... from... where.... group by... having... order by.. 实行次序:from... where...group by... having.... select ... order by... 因此在order by取得的結果里早已是排序的完的最终結果。 由from到where的結果以下的內容。 到group by时就获得了依据category_id分出去的好几个工作组 来到select的情况下,只从上边的每一个组里取第一条信息内容結果会以下 即便order by也仅仅从上边的結果里开展排列。其实不是每一个归类的全新信息内容。 返回我的目地上 --归类中全新的信息内容 依据上边的剖析,group by到select时只取到排序里的第一条信息内容。有2个处理方式 1,where+group by(对工作组开展排列) 2,从form回到的数据信息着手脚(即用子查寻) 由where+group by的处理方式 对group by里的工作组开展排列的涵数我只查出group_concat()能够开展排列,但group_concat的功效是将工作组里的字段名里的值开展串连起來。 select group_concat(id order by `date` desc) from `test` group by category_id 再改善一下 select * from `test` where id in(select SUBSTRING_INDEX(group_concat(id order by `date` desc),',',1) from `test` group by category_id ) order by `date` desc 子查寻处理计划方案 select * from (select * from `test` order by `date` desc) `temp` group by category_id order by `date` desc
|