本帖最后由 xviphackl 于 2013-07-30 16:14:18 编辑

解决方案 »

  1.   

    order by `order`, id
    order 相同的按 id 排序
    只要你遵守自己的约定,就不会出现 出乎意料 的结果
      

  2.   


    如,上图的数据,我现在想把role_id为1的数据排到10的上面,但是,结果出乎了意料。
    SELECT * FROM  `tbl` ORDER BY  `role_sort` DESC ,  `role_id` DESC 不能一遇到 这种问题, 就更改一次SQL语句?
      

  3.   

    首先你要想明白自己的需求或者排序规则----到底谁在上边谁在下边?拿discuz论坛的帖子排序来举例子全站置顶最考上
    版内置顶,在全站置顶下边
    普通帖子,在版内置顶下边然后同一级别的按照最后回复时间排序那这样的语句就很好写了,order by jibie desc,huifu desc 先按级别排再按时间排
    这个仅仅是举例子,我从楼主的描述没看出来你想制定什么样的规则,而这个恰恰是你要考虑的.你说想让谁排什么位置,通俗的说就是"置顶"/"下沉". 当然或许还有其他各种各样的需求,但都要先将之分析为业务逻辑
      

  4.   


    desc是倒序,由大到小排列,10当然就排到1的前面了,role_id那里用asc
      

  5.   

    就是一个表里面有很多内容,我们需要把一些自认为很重要的内容通过人为的的干预,让他到指定的位置!!!没有规则,很自由的让他“上”,“下”移动。给你所说的DISCUZ的排序不同,我们现在考虑的就一个字段,没有类型区分。只有数字的大小来判定这条内容他的位置。
    应该是这样,说得比较凌乱。
      

  6.   


    desc是倒序,由大到小排列,10当然就排到1的前面了,role_id那里用ascOK ,
    SELECT * FROM  `tbl` ORDER BY  `role_sort` DESC ,  `role_id` ASC你说是这样子是吗。反之,我想把ID为10的排到ID为1的上面,请问该怎么做,不能老是去更改SQL?
      

  7.   


    desc是倒序,由大到小排列,10当然就排到1的前面了,role_id那里用ascOK ,
    SELECT * FROM  `tbl` ORDER BY  `role_sort` DESC ,  `role_id` ASC你说是这样子是吗。反之,我想把ID为10的排到ID为1的上面,请问该怎么做,不能老是去更改SQL?如果你想人为指定,就写个函数,你想让10在1的上面,就传个10进这个函数,显示的时候让10在上面,想让1在上面是同样的道理。就是说,在显示的时候,进行控制。
      

  8.   


    desc是倒序,由大到小排列,10当然就排到1的前面了,role_id那里用ascOK ,
    SELECT * FROM  `tbl` ORDER BY  `role_sort` DESC ,  `role_id` ASC你说是这样子是吗。反之,我想把ID为10的排到ID为1的上面,请问该怎么做,不能老是去更改SQL?如果你想人为指定,就写个函数,你想让10在1的上面,就传个10进这个函数,显示的时候让10在上面,想让1在上面是同样的道理。就是说,在显示的时候,进行控制。
    关键是怎么去确定哪个在上面,哪个在下面。这是一个问题,?可以说说你的具体的办法么?
      

  9.   


    desc是倒序,由大到小排列,10当然就排到1的前面了,role_id那里用ascOK ,
    SELECT * FROM  `tbl` ORDER BY  `role_sort` DESC ,  `role_id` ASC你说是这样子是吗。反之,我想把ID为10的排到ID为1的上面,请问该怎么做,不能老是去更改SQL?如果你想人为指定,就写个函数,你想让10在1的上面,就传个10进这个函数,显示的时候让10在上面,想让1在上面是同样的道理。就是说,在显示的时候,进行控制。
    关键是怎么去确定哪个在上面,哪个在下面。这是一个问题,?可以说说你的具体的办法么?这要看你自己定的规则了,你不是要通过人为的干预让“自认为”重要的内容到制定的位置吗?那你得先把规则搞清楚,然后才能根据规则出代码。明白吗?