例子如下
现有表如下
id  num
1   3
2   1
3   2
4   2
5   3
6   2
7   1
要求排序规则为 order by num desc, id desc
在这个排序规则之下找出某个ID之后的数据,包括指定的这个ID,输入条件只有这个ID 假如现在输入ID 为 4  那么相应输出结果应该为
id  num
4  2
3  2
7  1
2  1假如现在输入ID 为 1  那么相应输出结果应该为
id  num
1  3
6  2
4  2
3  2
7  1
2  1
我尝试过limit  但是问题是现在输入条件只有ID  我无法找出这个ID对应应该limit 的 偏移量
我也尝试过用模拟rownum的办法取出,使用子查询,但是貌似limit  后面不能跟子查询?
我尝试后报错
希望各位大神能给出mysql的查询语句,小弟不胜感激

解决方案 »

  1.   

    select * from tb where num <= (select max(num) from tb where id=xxx)
      

  2.   

    根据1楼做些改动:
    select * from tb where num <= (select num from tb where id=xxx) order by num desc, id desc
      

  3.   

    这个不行啊  num有重复值,这样会把与num相等的都查出来  
    例如上面的李忠  输入ID 为 4的哪个结果,num=2的 ID为5的数据是不在输出结果里的
      

  4.   

    你好,你这个跟1楼的一样,可能没注意我这里的要求
    以上面例子为例   select num from tb where id=4  那么查出来的num 为 2
    这样num<=2的条件里面  是包含ID大于4的结果的
      

  5.   

    这个不行啊  num有重复值,这样会把与num相等的都查出来  
    例如上面的例子中  输入ID 为 4的哪个结果,num=2的 ID为6的数据是不在输出结果里的
      

  6.   

    order by id=@id desc, num desc, id desc
      

  7.   

    不知这样能否运行:
    select * from tb where num<(select num from tb where id=xxx)  or (num=(select num from tb where id=xxx) and id<=xxx) order by num desc, id desc