Bug #36189 | Order by is not being evaluated when a group by exists on the primary key | ||
---|---|---|---|
Submitted: | 17 Apr 2008 22:44 | Modified: | 9 Jul 2008 20:24 |
Reporter: | Brett Garland | Email Updates: | |
Status: | Can't repeat | Impact on me: | |
Category: | MySQL Server: General | Severity: | S3 (Non-critical) |
Version: | 5.0.51a | OS: | Linux (RHES 4 and RHES 5) |
Assigned to: | CPU Architecture: | Any | |
Tags: | GROUP BY, order by, primary key |
[17 Apr 2008 22:44]
Brett Garland
[17 Apr 2008 22:47]
Brett Garland
Sample Data
Attachment: sample_data.txt (text/plain), 20.81 KiB.
[18 Apr 2008 4:13]
Valeriy Kravchuk
Thank you for a problem report. Please, send the results of: explain select id,somedate from test2 group by id order by somedate desc; on your system.
[18 Apr 2008 14:38]
Brett Garland
Here ya go. mysql> explain select id,somedate from test2 group by id order by somedate desc; +----+-------------+-------+------+---------------+------+---------+------+------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+------+----------------+ | 1 | SIMPLE | test2 | ALL | NULL | NULL | NULL | NULL | 100 | Using filesort | +----+-------------+-------+------+---------------+------+---------+------+------+----------------+ 1 row in set (0.00 sec)
[26 May 2008 13:20]
Sergei Vasilyev
Have the same bug on 5.0.51a. And everything works fine on 5.0.27. Query "select * from `services_categories` where `parent` is null group by `id` order by `position` asc, `id` asc" on 5.0.51a sorts wrong (i.e., resulting order of `position` field is: 1, 14, 5, 3, ...; indeed it sorts by `id`, just if as there is no ORDER BY clause, and only a GROUP BY is). EXPLAIN says: 1 | SIMPLE | services_categories | ref | parent | parent | const | 17 | Using where And this gives "Using where; Using filesort" on 5.0.27, where all works fine.
[26 May 2008 13:33]
Sergei Vasilyev
Changing query to use some idiotic and useless join removes the bug. Query: select SC.* from `services_categories` SC left join `services_categories` SC2 on SC.`id` = SC2.`id` where SC.`parent` is null group by SC.`id` order by SC.`position` asc, SC.`id` asc works fine. This can be used as a work-around.
[7 Jul 2008 22:32]
Marc Steffens
I'd like to know whether a fix for this bug is planned in 5.0 community edition? I have a lot of code which is impacted by it and changing all queries to include a 'dummy' join is not a viable work around for me. thanks
[8 Jul 2008 14:14]
Michael Pretty
Request to upgrade this to higher severity than Non-critical. This is a major issue that will affect thousands of users. Not being able to sort grouped queries correctly without adding dummy code is a sever bug.
[9 Jul 2008 20:24]
Valeriy Kravchuk
Sorry, but I can not repeat the behaviour described with a newer version, 5.0.62: C:\Program Files\MySQL\MySQL Server 5.0\bin>mysql -uroot -proot -P3308 test Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.0.62-enterprise-gpl-nt MySQL Enterprise Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> CREATE TABLE `test2` ( -> `id` int(11) NOT NULL auto_increment, -> `SomeText` varchar(30) default NULL, -> `SomeDate` datetime NOT NULL, -> `CreationDate` datetime NOT NULL default '0000-00-00 00:00:00', -> `ModificationDate` timestamp NOT NULL default CURRENT_TIMESTAMP on upda te -> CURRENT_TIMESTAMP, -> PRIMARY KEY (`id`) -> ) ENGINE=MyISAM; Query OK, 0 rows affected (0.06 sec) mysql> insert into test2(id, `SomeDate`) values(1, '2007-01-01'); Query OK, 1 row affected (0.03 sec) mysql> insert into test2(id, `SomeDate`) values(2, '2006-01-01'); Query OK, 1 row affected (0.02 sec) mysql> insert into test2(id, `SomeDate`) values(3, '2008-01-01'); Query OK, 1 row affected (0.00 sec) mysql> select id,somedate from test2 group by id order by somedate desc; +----+---------------------+ | id | somedate | +----+---------------------+ | 3 | 2008-01-01 00:00:00 | | 1 | 2007-01-01 00:00:00 | | 2 | 2006-01-01 00:00:00 | +----+---------------------+ 3 rows in set (0.00 sec) mysql> explain select id,somedate from test2 group by id order by somedate desc; +----+-------------+-------+------+---------------+------+---------+------+----- -+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-------+------+---------------+------+---------+------+----- -+----------------+ | 1 | SIMPLE | test2 | ALL | NULL | NULL | NULL | NULL | 3 | Using filesort | +----+-------------+-------+------+---------------+------+---------+------+----- -+----------------+ 1 row in set (0.03 sec)
[9 Jul 2008 22:51]
Brett Garland
So you are saying that somehow this has been fixed in version 5.0.62?