本帖最后由 yao970953039 于 2015-01-31 14:32:39 编辑

解决方案 »

  1.   

       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://bbs.csdn.net/topics/320211382
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
      

  2.   


    CREATE TABLE `test` (
      `id` INT(1) UNSIGNED NOT NULL AUTO_INCREMENT,
      `type` TINYINT(1) DEFAULT NULL,
      `date` VARCHAR(10) DEFAULT NULL,
      `times` VARCHAR(10) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=INNODB DEFAULT CHARSET=utf8INSERT INTO `test` (`id`, `type`, `date`, `times`) VALUES
    (1, 1, NULL, ''),
    (2, 1, NULL, ''),
    (3, 2, '2015-01-02', '09:12'),
    (4, 1, NULL, ''),
    (5, 1, NULL, ''),
    (6, 2, '2015-02-03', '11:11'),
    (7, 2, '2014-12-11', '16:54'),
    (8, 1, NULL, ''),
    (9, 1, NULL, '');
    想得到的数据如下
    9 1
    8 1
    5 1
    4 1
    2 1
    1 1 
    6 2  2015-02-03  11:11
    3 2  2015-01-02  09:12
    7 2  2014-12-11  16:54
      

  3.   

    mysql> select * from test;
    +----+------+------------+-------+
    | id | type | date       | times |
    +----+------+------------+-------+
    |  1 |    1 | NULL       |       |
    |  2 |    1 | NULL       |       |
    |  3 |    2 | 2015-01-02 | 09:12 |
    |  4 |    1 | NULL       |       |
    |  5 |    1 | NULL       |       |
    |  6 |    2 | 2015-02-03 | 11:11 |
    |  7 |    2 | 2014-12-11 | 16:54 |
    |  8 |    1 | NULL       |       |
    |  9 |    1 | NULL       |       |
    +----+------+------------+-------+
    9 rows in set (0.00 sec)mysql> select * from test
        -> order by type,`date` desc, `id` desc;
    +----+------+------------+-------+
    | id | type | date       | times |
    +----+------+------------+-------+
    |  9 |    1 | NULL       |       |
    |  8 |    1 | NULL       |       |
    |  5 |    1 | NULL       |       |
    |  4 |    1 | NULL       |       |
    |  2 |    1 | NULL       |       |
    |  1 |    1 | NULL       |       |
    |  6 |    2 | 2015-02-03 | 11:11 |
    |  3 |    2 | 2015-01-02 | 09:12 |
    |  7 |    2 | 2014-12-11 | 16:54 |
    +----+------+------------+-------+
    9 rows in set (0.00 sec)mysql>
      

  4.   

    按照版主说的试了下,type为1的时候date为空才可以达到楼主想要的结果
      

  5.   


    select * from test
     order by type,(case when type=1 then id else date end) desc
      

  6.   

    嗯,我其实想要根据type来写if else逻辑  版主的不能符合我的要求,综合你俩的 差不多能搞出来