mysql中,order用于记录排序,group 用于分组,一般使用在sum,count函数中。这些是group与order一般的用法,group 还可用于合并多行记录,现在需求如下:
bc_front表结构为:| bc_front | CREATE TABLE `bc_front` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`create_dt` datetime DEFAULT NULL,
`tab_no` int(11) DEFAULT NULL,
`exposure_no` varchar(30) NOT NULL,
`title` varchar(50) DEFAULT NULL,
`contents` text,
`link_url` varchar(255) DEFAULT NULL,
`image_url` varchar(255) DEFAULT NULL,
`org_id` int(11) DEFAULT NULL,
`org_name` varchar(255) DEFAULT NULL,
`exposure_yn` tinyint(1) DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=62 DEFAULT CHARSET=utf8 |
在这张表里面,记录多版本的数据,在每次获取记录时,只获取最新版本的数据。
那么,我们该如何实现呢,最简单的sql,如下:
select * from bc_front group by exposure_no order by exposure_no desc;可是发现这样查询出的结果并非想要的,我们发现这样sql语句执行的结果是,按自然顺序先用group进行筛选,然后再对筛选的结果进行order,而并非我们想要的先order排序,然后再用group by 进行筛选,最后我们采用下面的sql语句实现了,select a.* from (select * from bc_front order by exposure_no ASC,create_dt DESC) as a group by a.exposure_no order by a.exposure_no ASC;虽然得到了想要的结果,可是却牺牲了效率,有没有更好的办法呢?