就是原数据库没有[sequence]这一列。这一列是因为客户要求数据顺序可以根据自己的意图随意排序 所以我加上去的。原来的数据库表里已经有了 几万条数据,如果是按你的方法就要select * from 现有表一张 order by find_in_set(id,'1,2,3,6,4,5,.....10000')这样是吗? 每次都要这样重新让他们排列一次? 我不太明白
实话说,还是没看懂你想实现什么功能。如果针对这个,只是 6 的顺序有变,其它不变则可以 select * from 现有表一张 order by id<=3 desc,id=6 desc,id
mysql> select * -> from users -> order by id<=3 desc,id=6 desc,id; +----+------+-----+ | id | Name | Sex | +----+------+-----+ | 1 | a | 1 | | 2 | aa | 1 | | 3 | aa | 1 | | 6 | aa | 1 | | 4 | a | 1 | | 5 | a | 1 | | 7 | a | 1 | | 8 | aa | 1 | | 9 | aa | 1 | | 10 | a | 1 | | 11 | aa | 1 | | 12 | aa | 1 | | 13 | a | 1 | | 14 | a | 1 | | 15 | a | 1 | | 16 | a | 1 | | 17 | b | 2 | | 18 | bb | 2 |
id px
3 1
6 2
4 3
与工作表连接再排序
id layer sequence
1 1 0
2 1 0
3 1 0
4 1 0
5 1 0
6 1 0
id*layer+sequence 6*1+(-2.5) 按生成的值按升序去排列
from 现有表一张
order by find_in_set(id,'1,2,3,6,4,5')你可以如上一样自己指定顺序
这里指的表是我的那张表对吗?对于MYSQL函数不是特别熟悉, 这个是对这个表进行一次这样的排序设置吗?
那每次更换顺序 都要这样重新设置一下排序吗? 假如有1W条? 可以大概讲一下这个函数的用途吗?谢谢
就是原数据库没有[sequence]这一列。这一列是因为客户要求数据顺序可以根据自己的意图随意排序 所以我加上去的。原来的数据库表里已经有了 几万条数据,如果是按你的方法就要select *
from 现有表一张
order by find_in_set(id,'1,2,3,6,4,5,.....10000')这样是吗? 每次都要这样重新让他们排列一次? 我不太明白
select *
from 现有表一张
order by id<=3 desc,id=6 desc,id
-> from users
-> order by id<=3 desc,id=6 desc,id;
+----+------+-----+
| id | Name | Sex |
+----+------+-----+
| 1 | a | 1 |
| 2 | aa | 1 |
| 3 | aa | 1 |
| 6 | aa | 1 |
| 4 | a | 1 |
| 5 | a | 1 |
| 7 | a | 1 |
| 8 | aa | 1 |
| 9 | aa | 1 |
| 10 | a | 1 |
| 11 | aa | 1 |
| 12 | aa | 1 |
| 13 | a | 1 |
| 14 | a | 1 |
| 15 | a | 1 |
| 16 | a | 1 |
| 17 | b | 2 |
| 18 | bb | 2 |
表
Id int(4) primary key auto_increment,//id为自增长
layer int(4),//级别
sequence int(4) default 0//排序比如说现有6条数据
id layer sequence
1 1 0
2 1 0
3 1 0
4 1 0
5 1 0
6 1 0用一条通用的SQL语句一次把所有数据都读取出来,将其放入内存中。假如我要添加一条数据 id :7 layer:1 sequence:0
添加完后数据按默认排序的话应该是在ID:6的下方但是我想让ID:7的数据在ID:6的上面显示(所以添加数据的时候我让是这样添加的:id :7 layer:1 sequence:-1.5 )
id layer sequence
1 1 0
2 1 0
3 1 0
4 1 0
5 1 0
7 1 -1.5
6 1 0
id*layer+sequence 5*1+0 <7*1+(-1.5)<6*1+0 asc
像这样的SQL语句怎么去写呢 ,就是按计算出来的值进行升序排序
建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
参考一下这个贴子的提问方式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)
这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。
`classifyId` int(4) NOT NULL auto_increment,
`classifyName` text,
`parentId` int(4) default NULL,
`layer` int(4) default NULL,
`sequence` int(4) default 0
PRIMARY KEY (`classifyId`)
)
INSERT INTO `classify` VALUES (5,'Sheet metal machinery#@@#板金機械#@@#板金加工机械#@@#판금기계',0,1),(6,'Laser machines#@@#レーザー加工機#@@#激光切割机#@@#레이저절단기',5,2),(7,'Turret punch presses#@@#タレットパンチプレス#@@#数控冲床 #@@#터릿펀칭프레스',5,2),(8,'Press brakes (Benders)#@@#プレスブレーキ#@@#折弯机#@@#절곡기',5,2),(9,'Univ. Press brakes#@@#万能プレスブレーキ#@@#万能液压折弯机#@@#만능유압절곡기',5,2),(10,'Shearing machines#@@#シャーリング#@@#剪裁机械#@@#샤링기',5,2),(11,'Corner shears#@@#コーナーシャー #@@#边角剪板机#@@#코너샤링기',5,2),(12,'Set presses#@@#セットプレス#@@#单工位冲床#@@#세트프레스',5,2),(13,'Iron worker#@@#アイアンワーカー#@@#形钢加工机#@@#아이언워크',5,2),(14,'V cut machines#@@#Vカットマシン#@@#V型切割机#@@#V커팅기',5,2),(15,'Auto programming system#@@#自動プロ#@@#自动软件处理系统#@@#자동프로그래밍',5,2)我想根据((classifyId*layer)+sequence) 这个得到的值进行升序排列
比如
select * from classify order by ((classifyId*layer)+sequence) asc
怎么能让它对于这个计算的值进行排列读出呢
select * from classify order by ((classifyId*layer)+sequence) asc
select classifyId*layer+sequence from tt
select * from classify order by (select classifyId*layer+sequence from classify) asc;那这样的语句应该如何去处理阿?
金加工机械#@@#????',0,1),(6,'Laser machines#@@#レーザー加工機#@@#激光切割机#@@#
?????',5,2),(7,'Turret punch presses#@@#タレットパンチプレス#@@#数控冲床 #@@#??
????',5,2),(8,'Press brakes (Benders)#@@#プレスブレーキ#@@#折弯机#@@#???',5,2),
9,'Univ. Press brakes#@@#万能プレスブレーキ#@@#万能液压折弯机#@@#???????',5,2),
10,'Shearing machines#@@#シャーリング#@@#剪裁机械#@@#???',5,2),(11,'Corner shea
s#@@#コーナーシャー #@@#边角剪板机#@@#?????',5,2),(12,'Set presses#@@#セットプ
レス#@@#单工位冲床#@@#?????',5,2),(13,'Iron worker#@@#アイアンワーカー#@@#形钢加
工机#@@#?????',5,2),(14,'V cut machines#@@#Vカットマシン#@@#V型切割机#@@#V???',
,2),(15,'Auto programming system#@@#自動プロ#@@#自动软件处理系统#@@#???????',5,
);
ERROR 1136 (21S01): Column count doesn't match value count at row 1
mysql>你提供的例子自己有试过吗?
CREATE TABLE `classify` (
`classifyId` int(4) NOT NULL auto_increment,
`classifyName` text,
`parentId` int(4) default NULL,
`layer` int(4) default NULL,
PRIMARY KEY (`classifyId`)
) ENGINE=MyISAM AUTO_INCREMENT=56 DEFAULT CHARSET=utf8;
INSERT INTO `classify` VALUES (5,'Sheet metal machinery#@@#板金機械#@@#板金加工机械#@@#판금기계',0,1),(6,'Laser machines#@@#レーザー加工機#@@#激光切割机#@@#레이저절단기',5,2),(7,'Turret punch presses#@@#タレットパンチプレス#@@#数控冲床 #@@#터릿펀칭프레스',5,2),(8,'Press brakes (Benders)#@@#プレスブレーキ#@@#折弯机#@@#절곡기',5,2),(9,'Univ. Press brakes#@@#万能プレスブレーキ#@@#万能液压折弯机#@@#만능유압절곡기',5,2),(10,'Shearing machines#@@#シャーリング#@@#剪裁机械#@@#샤링기',5,2),(11,'Corner shears#@@#コーナーシャー #@@#边角剪板机#@@#코너샤링기',5,2),(12,'Set presses#@@#セットプレス#@@#单工位冲床#@@#세트프레스',5,2),(13,'Iron worker#@@#アイアンワーカー#@@#形钢加工机#@@#아이언워크',5,2),(14,'V cut machines#@@#Vカットマシン#@@#V型切割机#@@#V커팅기',5,2),(15,'Auto programming system#@@#自動プロ#@@#自动软件处理系统#@@#자동프로그래밍',5,2);
alter table classify add sequence int(4) default 0;