我有一张表,表里有多个字段,其中两字段:状态t_stu(数字1-10),发布时间:t_tim,现在查询结果想先t_stu=1排最前面,然后其余的全部按时间先后逆序(不按t_stu大小排序了)。我用order by t_stu,t_tim desc得到结果不对,是t_stu=1排在前面了,然后后面是在t_stu的基础上按时间逆序,这不是我想要的结果。比如有一组数据:
  t_stu      t_tim
    5         09:35
    3         09:28
    1      09:38
    5         09:12
    4         09:48
    3         09:22
按上查询出来是:
  t_stu      t_tim
    1      09:38
    3         09:28
    3         09:22
    4         09:48
    5         09:35
    5         09:12
我想要的结果是如下的结果,请问怎么实现,非常感谢
  t_stu      t_tim
    1         09:38
    4      09:48 ,也就是除状态以外,其他全部按时间逆序
    5         09:35  
    3         09:28
    3         09:22
    5         09:12我是初学,还请各位大虾们多多指教,在此感

解决方案 »

  1.   


    select * from tablename order by if(t_stu=1,t_stu,t_tim) desc;
      

  2.   

    sELECT * from ttg1 order by if(t_stu=1,t_stu,t_tim  ) desc
      

  3.   


    select * from tablename order by
    if(t_stu=1,t_stu,time_to_sec(t_tim)-86399) desc;
      

  4.   


    谢谢您的回答,用您的语句查询出来仍是按时间排序,并且t_stu=1没有显出来呢,请教啊
      

  5.   


    谢谢您的回答,用您的语句查询出来仍是按时间排序,并且t_stu=1没有显出来呢,请教啊
      

  6.   


    谢谢您的回答,用您的语句查询出来仍是按时间排序,并且t_stu=1没有显出来呢,请教啊
      

  7.   


    t_tim直接转成时间戳整数型的,谢谢
      

  8.   


       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式http://topic.csdn.net/u/20091130/20/8343ee6a-417c-4c2d-9415-fa46604a00cf.html
       
       1. 你的 create table xxx .. 语句
       2. 你的 insert into xxx ... 语句
       3. 结果是什么样,(并给以简单的算法描述)
       4. 你用的数据库名称和版本(经常有人在MS SQL server版问 MySQL)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  9.   

    select * from (select t_stu,t_tim from tb where t_stu = 1) a
    union
    select * from (select t_stu,t_tim from tb where t_stu<>1 order by t_tim desc) b
      

  10.   

    没有看到你的create table 语句和 insert 语句啊。
      

  11.   

    我有一张表,表里有多个字段,其中两字段:状态t_stu(数字1-10),发布时间:t_tim,现在查询结果想先t_stu=1排最前面,然后其余的全部按时间先后逆序(不按t_stu大小排序了)。我用order by t_stu,t_tim desc得到结果不对,是t_stu=1排在前面了,然后后面是在t_stu的基础上按时间逆序,这不是我想要的结果。
    我是在PHPNow里测试的,下面是导出来数据表结构及数据-- phpMyAdmin SQL Dump
    -- version 3.2.0.1
    -- http://www.phpmyadmin.net
    --
    -- 主机: localhost
    -- 生成日期: 2010 年 04 月 09 日 03:36
    -- 服务器版本: 5.0.83
    -- PHP 版本: 5.2.10SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
    /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
    /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
    /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
    /*!40101 SET NAMES utf8 */;--
    -- 数据库: `mytest`
    ---- ----------------------------------------------------------
    -- 表的结构 `tend`
    --CREATE TABLE IF NOT EXISTS `tend` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `cnt` tinyint(3) unsigned NOT NULL default '1',
      `god` int(10) unsigned default '0',
      `aid` int(10) unsigned default '0',
      `t_tim` int(10) unsigned default '0',
      `t_stu` tinyint(3) unsigned NOT NULL default '0',
      PRIMARY KEY  (`id`)
    ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=21782 ;--
    -- 转存表中的数据 `tend`
    --INSERT INTO `tend` (`id`, `cnt`, `god`, `aid`, `t_tim`, `t_stu`) VALUES
    (230, 1, 422, 243, 1263969843, 6),
    (301, 1, 1630, 1089, 1263994231, 1),
    (1024, 1, 1700, 1168, 1264424112, 10),
    (1156, 1, 0, 0, 1264503945, 5),
    (1241, 1, 800, 536, 1264562344, 1),
    (1487, 1, 471, 313, 1264755894, 9),
    (1497, 1, 607, 446, 1264757909, 1),
    (1521, 2, 384, 229, 1264765911, 8),
    (1527, 1, 384, 229, 1264767574, 6),
    (1541, 1, 518, 337, 1264770033, 3),
    (1798, 1, 359, 175, 1265256419, 1),
    (1849, 1, 359, 175, 1265620065, 6),
    (1882, 1, 471, 313, 1266670635, 7),
    (1883, 1, 432, 265, 1266670796, 4),
    (1912, 1, 1266, 826, 1266756302, 3),
    (1956, 1, 516, 325, 1266831684, 6),
    (1971, 1, 0, 0, 1266903628, 1);
      

  12.   

    执行 select * from tend order by if(t_stu=1,t_stu,t_tim) desc 得到的结果如下:  id cnt   god   aid    t_tim     t_stu        1956  1        516     325    1266831684    6 
          1912       1        1266    826    1266756302    3 
          1883       1        432     265    1266670796    4 
          1882       1        471     313    1266670635    7 
          1849       1   359     175    1265620065    6 
          1541       1        518     337    1264770033    3 
          1527       1        384     229    1264767574    6 
          1521       2        384     229    1264765911    8 
          1487       1        471     313    1264755894    9 
          1156       1        0        0     1264503945    5 
          1024       1        1700    1168   1264424112    10 
          230        1        422     243    1263969843    6 
          1798       1   359     175    1265256419    1 
          1497       1   607     446    1264757909    1 
          1241       1   800     536    1264562344    1 
          301        1   1630    1089   1263994231    1 
          1971       1   0        0     1266903628    1 
    而我想要的结果是:       id cnt   god   aid    t_tim     t_stu        1798       1   359     175    1265256419    1 
          1497       1   607     446    1264757909    1 
          1241       1   800     536    1264562344    1 
          301        1   1630    1089   1263994231    1 
          1971       1   0        0     1266903628    1 
          1956  1        516     325    1266831684    6 ,除s_stu=1,其余只按时间先后逆序
          1912       1        1266    826    1266756302    3 
          1883       1        432     265    1266670796    4 
          1882       1        471     313    1266670635    7 
          1849       1   359     175    1265620065    6 
          1541       1        518     337    1264770033    3 
          1527       1        384     229    1264767574    6 
          1521       2        384     229    1264765911    8 
          1487       1        471     313    1264755894    9 
          1156       1        0        0     1264503945    5 
          1024       1        1700    1168   1264424112    10 
          230        1        422     243    1263969843    6 
      

  13.   

    select * from tend where t_stu=1
    union all 
    select * from 
    (
    select * from tend where t_stu!=1 order by t_tim desc
    )t;
      

  14.   


    谢谢您的热心解答,用您的语句测试排序正确,但感觉这样数据多的时候查询时间是不是会变长,请问不用union all能实现么?谢谢
      

  15.   

    mysql> select * from tend;
    +------+-----+------+------+------------+-------+
    | id   | cnt | god  | aid  | t_tim      | t_stu |
    +------+-----+------+------+------------+-------+
    |  230 |   1 |  422 |  243 | 1263969843 |     6 |
    |  301 |   1 | 1630 | 1089 | 1263994231 |     1 |
    | 1024 |   1 | 1700 | 1168 | 1264424112 |    10 |
    | 1156 |   1 |    0 |    0 | 1264503945 |     5 |
    | 1241 |   1 |  800 |  536 | 1264562344 |     1 |
    | 1487 |   1 |  471 |  313 | 1264755894 |     9 |
    | 1497 |   1 |  607 |  446 | 1264757909 |     1 |
    | 1521 |   2 |  384 |  229 | 1264765911 |     8 |
    | 1527 |   1 |  384 |  229 | 1264767574 |     6 |
    | 1541 |   1 |  518 |  337 | 1264770033 |     3 |
    | 1798 |   1 |  359 |  175 | 1265256419 |     1 |
    | 1849 |   1 |  359 |  175 | 1265620065 |     6 |
    | 1882 |   1 |  471 |  313 | 1266670635 |     7 |
    | 1883 |   1 |  432 |  265 | 1266670796 |     4 |
    | 1912 |   1 | 1266 |  826 | 1266756302 |     3 |
    | 1956 |   1 |  516 |  325 | 1266831684 |     6 |
    | 1971 |   1 |    0 |    0 | 1266903628 |     1 |
    +------+-----+------+------+------------+-------+
    17 rows in set (0.00 sec)mysql> select *
        -> from tend
        -> order by t_stu=1 desc,t_tim desc;
    +------+-----+------+------+------------+-------+
    | id   | cnt | god  | aid  | t_tim      | t_stu |
    +------+-----+------+------+------------+-------+
    | 1971 |   1 |    0 |    0 | 1266903628 |     1 |
    | 1798 |   1 |  359 |  175 | 1265256419 |     1 |
    | 1497 |   1 |  607 |  446 | 1264757909 |     1 |
    | 1241 |   1 |  800 |  536 | 1264562344 |     1 |
    |  301 |   1 | 1630 | 1089 | 1263994231 |     1 |
    | 1956 |   1 |  516 |  325 | 1266831684 |     6 |
    | 1912 |   1 | 1266 |  826 | 1266756302 |     3 |
    | 1883 |   1 |  432 |  265 | 1266670796 |     4 |
    | 1882 |   1 |  471 |  313 | 1266670635 |     7 |
    | 1849 |   1 |  359 |  175 | 1265620065 |     6 |
    | 1541 |   1 |  518 |  337 | 1264770033 |     3 |
    | 1527 |   1 |  384 |  229 | 1264767574 |     6 |
    | 1521 |   2 |  384 |  229 | 1264765911 |     8 |
    | 1487 |   1 |  471 |  313 | 1264755894 |     9 |
    | 1156 |   1 |    0 |    0 | 1264503945 |     5 |
    | 1024 |   1 | 1700 | 1168 | 1264424112 |    10 |
    |  230 |   1 |  422 |  243 | 1263969843 |     6 |
    +------+-----+------+------+------------+-------+
    17 rows in set (0.06 sec)mysql>
      

  16.   

    当您的问题得到解答后请及时结贴.
    http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html