我有一张表,表里有多个字段,其中两字段:状态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我是初学,还请各位大虾们多多指教,在此感
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我是初学,还请各位大虾们多多指教,在此感
解决方案 »
- 菜鸟问题:如何远程连接到mysql服务器
- MySQL查询最大值问题
- 求救!如何在windows下使用odbc连接linux下的mysql
- 在my.ini设置sql_mode=STRICT_TRANS_TABLES,在sqlyog为什么显示mode是空的
- 请教 mysql建立的数据库在data文件夹里面吗?
- 题目:表中有ABC三列(字段?),如果A大于B则取A值,否则取B值,如果B大于C则取B值,否则取A值。用SQL语句实现。
- 两个表的对比问题
- php出现10055错误是什么原因,请问如何解决?
- 求助mysql查询问题
- 请教,把一个表的每3行里同一个项目,变成一行3个项目
- 数据库设计问题(急)
- 统计数据问题
select * from tablename order by if(t_stu=1,t_stu,t_tim) desc;
select * from tablename order by
if(t_stu=1,t_stu,time_to_sec(t_tim)-86399) desc;
谢谢您的回答,用您的语句查询出来仍是按时间排序,并且t_stu=1没有显出来呢,请教啊
谢谢您的回答,用您的语句查询出来仍是按时间排序,并且t_stu=1没有显出来呢,请教啊
谢谢您的回答,用您的语句查询出来仍是按时间排序,并且t_stu=1没有显出来呢,请教啊
t_tim直接转成时间戳整数型的,谢谢
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
union
select * from (select t_stu,t_tim from tb where t_stu<>1 order by t_tim desc) b
我是在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);
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
union all
select * from
(
select * from tend where t_stu!=1 order by t_tim desc
)t;
谢谢您的热心解答,用您的语句测试排序正确,但感觉这样数据多的时候查询时间是不是会变长,请问不用union all能实现么?谢谢
+------+-----+------+------+------------+-------+
| 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>
http://topic.csdn.net/u/20090501/15/7548d251-aec2-4975-a9bf-ca09a5551ba5.html