本帖最后由 potahai 于 2010-05-07 11:20:19 编辑

解决方案 »

  1.   

    可以建立一个新表,保存排序顺序,
    id px
    3  1
    6  2
    4  3
    与工作表连接再排序
      

  2.   

    换个数据,有6条数据
    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)  按生成的值按升序去排列
      

  3.   

    select *
    from 现有表一张
    order by find_in_set(id,'1,2,3,6,4,5')你可以如上一样自己指定顺序
      

  4.   


    这里指的表是我的那张表对吗?对于MYSQL函数不是特别熟悉,  这个是对这个表进行一次这样的排序设置吗?
    那每次更换顺序 都要这样重新设置一下排序吗? 假如有1W条? 可以大概讲一下这个函数的用途吗?谢谢
      

  5.   


    就是原数据库没有[sequence]这一列。这一列是因为客户要求数据顺序可以根据自己的意图随意排序 所以我加上去的。原来的数据库表里已经有了 几万条数据,如果是按你的方法就要select *
    from 现有表一张
    order by find_in_set(id,'1,2,3,6,4,5,.....10000')这样是吗? 每次都要这样重新让他们排列一次? 我不太明白
      

  6.   

    实话说,还是没看懂你想实现什么功能。如果针对这个,只是 6 的顺序有变,其它不变则可以
    select *
    from 现有表一张
    order by id<=3 desc,id=6 desc,id
      

  7.   

    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 |
      

  8.   

    对不起,我没把问题讲清楚。

    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语句怎么去写呢  ,就是按计算出来的值进行升序排序
      

  9.   

    看不懂你说的是什么。 (不要高估你的汉语表达能力或者我的汉语理解能力)
       建议你列出你的表结构,并提供测试数据以及基于这些测试数据的所对应正确结果。
       参考一下这个贴子的提问方式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)
       
       这样想帮你的人可以直接搭建和你相同的环境,并在给出方案前进行测试,避免文字描述理解上的误差。   
      

  10.   

    mysql 5.0CREATE TABLE `classify` (
      `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
    怎么能让它对于这个计算的值进行排列读出呢
      

  11.   

    像这样的语句不知道如何去写
    select * from classify order by ((classifyId*layer)+sequence) asc
      

  12.   

    classifyId*layer+sequence:直接用SQL语句不行
    select classifyId*layer+sequence from tt
      

  13.   


    select * from classify order by (select classifyId*layer+sequence from classify) asc;那这样的语句应该如何去处理阿?
      

  14.   

    mysql> 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 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>你提供的例子自己有试过吗?
      

  15.   

    select *,(classifyId*layer+sequence) sort  from classify order by sort asc;
      

  16.   

    你的INSERT INTO 语句有问题,有5个字段,只有4个值
      

  17.   

    我是直接导入用SOURCE 导入.sql数据的,没有报错误啊。
      

  18.   


    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;
      

  19.   

    SELECT *,(classifyId*layer+sequence) sort FROM classify ORDER BY sort ASC;classifyId*layer+sequence:三个字段是上一条、下一条 记录 的?
      

  20.   

    如果你只是 要生成classifyId*layer+sequence,那么已经可以了,但你要求排序?
      

  21.   

    比如说我想把6,'Laser machines#@@#レーザー加工機#@@#激光切割机#@@#레이저절단기',5,2,0这条数据 排序到5的上面而不改变其他 就是修改一下sequense的直 让它的值小于 ID为5的就可以了但是这个在HIBERNATE里貌似用不了 所以郁闷
      

  22.   

    SELECT * FROM classify ORDER BY IF(classifyid=6,-1,0)